+
+ public void testReadWriteRead() throws Exception {
+ if (userAdmin instanceof LdifUserAdmin) {
+ Dictionary<String, Object> props = userAdmin.getProperties();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ ((LdifUserAdmin) userAdmin).save(out);
+ byte[] arr = out.toByteArray();
+ out.close();
+ userAdmin.destroy();
+ // String written = new String(arr);
+ // System.out.print(written);
+ try (ByteArrayInputStream in = new ByteArrayInputStream(arr)) {
+ userAdmin = new LdifUserAdmin(props);
+ ((LdifUserAdmin) userAdmin).load(in);
+ }
+ Role[] search = userAdmin.getRoles(null);
+ assertEquals(4, search.length);
+ } else {
+ // test not relevant for LDAP
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ Path tempDir = Files.createTempDirectory(getClass().getName());
+ String uriProp = System.getProperty("argeo.userdirectory.uri");
+ if (uriProp != null)
+ uri = new URI(uriProp);
+ else {
+ tempDir.toFile().deleteOnExit();
+ Path ldifPath = tempDir.resolve(BASE_DN + ".ldif");
+ try (InputStream in = getClass().getResource("basic.ldif").openStream()) {
+ Files.copy(in, ldifPath);
+ }
+ uri = ldifPath.toUri();
+ }
+
+ bitronix.tm.Configuration tmConf = TransactionManagerServices.getConfiguration();
+ tmConf.setServerId(UUID.randomUUID().toString());
+ tmConf.setLogPart1Filename(new File(tempDir.toFile(), "btm1.tlog").getAbsolutePath());
+ tmConf.setLogPart2Filename(new File(tempDir.toFile(), "btm2.tlog").getAbsolutePath());
+ tm = TransactionManagerServices.getTransactionManager();
+
+ userAdmin = initUserAdmin(uri, tm);
+ }
+
+ private AbstractUserDirectory initUserAdmin(URI uri, TransactionManager tm) {
+ Dictionary<String, Object> props = new Hashtable<>();
+ props.put(UserAdminConf.uri.name(), uri.toString());
+ props.put(UserAdminConf.baseDn.name(), BASE_DN);
+ props.put(UserAdminConf.userBase.name(), "ou=users");
+ props.put(UserAdminConf.groupBase.name(), "ou=groups");
+ AbstractUserDirectory userAdmin;
+ if (uri.getScheme().startsWith("ldap"))
+ userAdmin = new LdapUserAdmin(props);
+ else
+ userAdmin = new LdifUserAdmin(props);
+ userAdmin.init();
+ // JTA
+ EhCacheXAResourceProducer.registerXAResource(UserDirectory.class.getName(), userAdmin.getXaResource());
+ userAdmin.setTransactionManager(tm);
+ return userAdmin;
+ }
+
+ private void persistAndRestart() {
+ EhCacheXAResourceProducer.unregisterXAResource(UserDirectory.class.getName(), userAdmin.getXaResource());
+ if (userAdmin instanceof LdifUserAdmin)
+ ((LdifUserAdmin) userAdmin).save();
+ userAdmin.destroy();
+ userAdmin = initUserAdmin(uri, tm);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ EhCacheXAResourceProducer.unregisterXAResource(UserDirectory.class.getName(), userAdmin.getXaResource());
+ tm.shutdown();
+ if (userAdmin != null)
+ userAdmin.destroy();
+ }
+