Move enterprise tests
[lgpl/argeo-commons.git] / org.argeo.enterprise / ext / test / org / argeo / osgi / useradmin / LdifUserAdminTest.java
diff --git a/org.argeo.enterprise/ext/test/org/argeo/osgi/useradmin/LdifUserAdminTest.java b/org.argeo.enterprise/ext/test/org/argeo/osgi/useradmin/LdifUserAdminTest.java
deleted file mode 100644 (file)
index 8432ce9..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-package org.argeo.osgi.useradmin;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.FileVisitResult;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.Arrays;
-import java.util.Dictionary;
-import java.util.Hashtable;
-import java.util.List;
-
-import org.argeo.naming.LdapAttrs;
-import org.argeo.osgi.transaction.SimpleTransactionManager;
-import org.osgi.service.useradmin.Authorization;
-import org.osgi.service.useradmin.Group;
-import org.osgi.service.useradmin.Role;
-import org.osgi.service.useradmin.User;
-
-import junit.framework.TestCase;
-
-/** {@link LdifUserAdmin} tests. */
-public class LdifUserAdminTest extends TestCase implements BasicTestConstants {
-       // We have to keep using JUnit because of
-       // https://issues.apache.org/jira/browse/SUREFIRE-1669
-
-       final static int TM_SIMPLE = 0;
-       final static int TM_BITRONIX = 1;
-
-       private int tmType = TM_SIMPLE;
-       private SimpleTransactionManager tm;
-       private URI uri;
-       private AbstractUserDirectory userAdmin;
-       private Path tempDir;
-
-       public void setUp() {
-               System.out.println("Enter setUp()");
-               try {
-                       tempDir = Files.createTempDirectory(getClass().getName());
-                       tempDir.toFile().deleteOnExit();
-                       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();
-                       }
-
-                       // Init transaction manager
-                       if (TM_SIMPLE == tmType) {
-                               tm = new SimpleTransactionManager();
-                       }
-//             else if (TM_BITRONIX == tmType) {
-//                     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);
-               } catch (Exception e) {
-                       throw new RuntimeException(e);
-               }
-       }
-
-       public void testEdition() throws Exception {
-               User demoUser = (User) userAdmin.getRole(DEMO_USER_DN);
-               assert demoUser != null;
-
-               tm.begin();
-               String newName = "demo";
-               demoUser.getProperties().put("cn", newName);
-               assert newName.equals(demoUser.getProperties().get("cn"));
-               tm.commit();
-               persistAndRestart();
-               assert newName.equals(demoUser.getProperties().get("cn"));
-
-               tm.begin();
-               userAdmin.removeRole(DEMO_USER_DN);
-               tm.commit();
-               persistAndRestart();
-
-               // check data
-               Role[] search = userAdmin.getRoles("(objectclass=inetOrgPerson)");
-               assert 1 == search.length;
-               Group editorGroup = (Group) userAdmin.getRole(EDITORS_GROUP_DN);
-               assert editorGroup != null;
-               Role[] members = editorGroup.getMembers();
-               assert 1 == members.length;
-       }
-
-       public void testRetrieve() throws Exception {
-               // users
-               User rootUser = (User) userAdmin.getRole(ROOT_USER_DN);
-               assert rootUser != null;
-               User demoUser = (User) userAdmin.getRole(DEMO_USER_DN);
-               assert demoUser != null;
-
-               // groups
-               Group adminGroup = (Group) userAdmin.getRole(ADMIN_GROUP_DN);
-               assert adminGroup != null;
-               Role[] members = adminGroup.getMembers();
-               assert 1 == members.length;
-               assert rootUser.equals(members[0]);
-
-               Group editorGroup = (Group) userAdmin.getRole(EDITORS_GROUP_DN);
-               assert editorGroup != null;
-               members = editorGroup.getMembers();
-               assert 2 == members.length;
-               assert adminGroup.equals(members[0]);
-               assert demoUser.equals(members[1]);
-
-               Authorization rootAuth = userAdmin.getAuthorization(rootUser);
-               List<String> rootRoles = Arrays.asList(rootAuth.getRoles());
-               assert 3 == rootRoles.size();
-               assert rootRoles.contains(ROOT_USER_DN);
-               assert rootRoles.contains(ADMIN_GROUP_DN);
-               assert rootRoles.contains(EDITORS_GROUP_DN);
-
-               // properties
-               assert "root@localhost".equals(rootUser.getProperties().get("mail"));
-
-               // credentials
-               // {SHA}
-               assert rootUser.hasCredential(LdapAttrs.userPassword.name(), "demo".getBytes(StandardCharsets.UTF_8));
-               // {PBKDF2_SHA256}
-               assert demoUser.hasCredential(LdapAttrs.userPassword.name(), "demo".getBytes(StandardCharsets.UTF_8));
-
-               // search
-               Role[] search = userAdmin.getRoles(null);
-               assert 4 == search.length;
-               search = userAdmin.getRoles("(objectClass=groupOfNames)");
-               assert 2 == search.length;
-               search = userAdmin.getRoles("(objectclass=inetOrgPerson)");
-               assert 2 == search.length;
-               search = userAdmin.getRoles("(&(objectclass=inetOrgPerson)(uid=demo))");
-               assert 1 == search.length;
-       }
-
-       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);
-                       assert 4 == search.length;
-               } else {
-                       // test not relevant for LDAP
-               }
-       }
-
-       private AbstractUserDirectory initUserAdmin(URI uri, SimpleTransactionManager 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
-//             if (TM_BITRONIX == tmType)
-//                     EhCacheXAResourceProducer.registerXAResource(UserDirectory.class.getName(), userAdmin.getXaResource());
-               userAdmin.setTransactionControl(tm);
-               return userAdmin;
-       }
-
-       private void persistAndRestart() {
-//             if (TM_BITRONIX == tmType)
-//                     EhCacheXAResourceProducer.unregisterXAResource(UserDirectory.class.getName(), userAdmin.getXaResource());
-               if (userAdmin instanceof LdifUserAdmin)
-                       ((LdifUserAdmin) userAdmin).save();
-               userAdmin.destroy();
-               userAdmin = initUserAdmin(uri, tm);
-       }
-
-       public void tearDown() throws Exception {
-//             if (TM_BITRONIX == tmType) {
-//                     EhCacheXAResourceProducer.unregisterXAResource(UserDirectory.class.getName(), userAdmin.getXaResource());
-//                     ((BitronixTransactionManager) tm).shutdown();
-//             }
-               if (userAdmin != null)
-                       userAdmin.destroy();
-               if (tempDir != null)
-                       Files.walkFileTree(tempDir, new SimpleFileVisitor<Path>() {
-                               @Override
-                               public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                                       Files.delete(file);
-                                       return FileVisitResult.CONTINUE;
-                               }
-
-                               @Override
-                               public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
-                                       Files.delete(dir);
-                                       return FileVisitResult.CONTINUE;
-                               }
-
-                       });
-       }
-
-}