X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.core%2Fext%2Ftest%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifUserAdminTest.java;fp=org.argeo.security.core%2Fext%2Ftest%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifUserAdminTest.java;h=0000000000000000000000000000000000000000;hb=e66b9893b0e511f8ab295e3cee42b7dc966f1597;hp=a8a7d226a1aa124c135d038882782af8e93bf291;hpb=8260f4470f514ea347ca53f5b4dfc632c4a4de66;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/ext/test/org/argeo/osgi/useradmin/LdifUserAdminTest.java b/org.argeo.security.core/ext/test/org/argeo/osgi/useradmin/LdifUserAdminTest.java deleted file mode 100644 index a8a7d226a..000000000 --- a/org.argeo.security.core/ext/test/org/argeo/osgi/useradmin/LdifUserAdminTest.java +++ /dev/null @@ -1,191 +0,0 @@ -package org.argeo.osgi.useradmin; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.InputStream; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Base64; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.List; -import java.util.UUID; - -import javax.transaction.TransactionManager; - -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 bitronix.tm.BitronixTransactionManager; -import bitronix.tm.TransactionManagerServices; -import bitronix.tm.resource.ehcache.EhCacheXAResourceProducer; -import junit.framework.TestCase; - -public class LdifUserAdminTest extends TestCase implements BasicTestConstants { - private BitronixTransactionManager tm; - private URI uri; - private AbstractUserDirectory userAdmin; - - public void testConcurrent() throws Exception { - } - - @SuppressWarnings("unchecked") - public void testEdition() throws Exception { - User demoUser = (User) userAdmin.getRole(DEMO_USER_DN); - assertNotNull(demoUser); - - tm.begin(); - String newName = "demo"; - demoUser.getProperties().put("cn", newName); - assertEquals(newName, demoUser.getProperties().get("cn")); - tm.commit(); - persistAndRestart(); - assertEquals(newName, demoUser.getProperties().get("cn")); - - tm.begin(); - userAdmin.removeRole(DEMO_USER_DN); - tm.commit(); - persistAndRestart(); - - // check data - Role[] search = userAdmin.getRoles("(objectclass=inetOrgPerson)"); - assertEquals(1, search.length); - Group editorGroup = (Group) userAdmin.getRole(EDITORS_GROUP_DN); - assertNotNull(editorGroup); - Role[] members = editorGroup.getMembers(); - assertEquals(1, members.length); - } - - public void testRetrieve() throws Exception { - // users - User rootUser = (User) userAdmin.getRole(ROOT_USER_DN); - assertNotNull(rootUser); - User demoUser = (User) userAdmin.getRole(DEMO_USER_DN); - assertNotNull(demoUser); - - // groups - Group adminGroup = (Group) userAdmin.getRole(ADMIN_GROUP_DN); - assertNotNull(adminGroup); - Role[] members = adminGroup.getMembers(); - assertEquals(1, members.length); - assertEquals(rootUser, members[0]); - - Group editorGroup = (Group) userAdmin.getRole(EDITORS_GROUP_DN); - assertNotNull(editorGroup); - members = editorGroup.getMembers(); - assertEquals(2, members.length); - assertEquals(adminGroup, members[0]); - assertEquals(demoUser, members[1]); - - Authorization rootAuth = userAdmin.getAuthorization(rootUser); - List rootRoles = Arrays.asList(rootAuth.getRoles()); - assertEquals(3, rootRoles.size()); - assertTrue(rootRoles.contains(ROOT_USER_DN)); - assertTrue(rootRoles.contains(ADMIN_GROUP_DN)); - assertTrue(rootRoles.contains(EDITORS_GROUP_DN)); - - // properties - assertEquals("root@localhost", rootUser.getProperties().get("mail")); - - // credentials - byte[] hashedPassword = ("{SHA}" + Base64.getEncoder().encodeToString(DigestUtils.sha1("demo".getBytes()))) - .getBytes(); - assertTrue(rootUser.hasCredential(LdifName.userPassword.name(), hashedPassword)); - assertTrue(demoUser.hasCredential(LdifName.userPassword.name(), hashedPassword)); - - // search - Role[] search = userAdmin.getRoles(null); - assertEquals(4, search.length); - search = userAdmin.getRoles("(objectClass=groupOfNames)"); - assertEquals(2, search.length); - search = userAdmin.getRoles("(objectclass=inetOrgPerson)"); - assertEquals(2, search.length); - search = userAdmin.getRoles("(&(objectclass=inetOrgPerson)(uid=demo))"); - assertEquals(1, search.length); - } - - public void testReadWriteRead() throws Exception { - if (userAdmin instanceof LdifUserAdmin) { - Dictionary 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 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(); - } - -}