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 org.apache.commons.codec.binary.Base64;
-import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.io.IOUtils;
+import javax.transaction.TransactionManager;
+
import org.osgi.service.useradmin.Authorization;
import org.osgi.service.useradmin.Group;
import org.osgi.service.useradmin.Role;
import junit.framework.TestCase;
public class LdifUserAdminTest extends TestCase implements BasicTestConstants {
- private AbstractUserDirectory userAdmin;
private BitronixTransactionManager tm;
+ private URI uri;
+ private AbstractUserDirectory userAdmin;
+
+ public void testConcurrent() throws Exception {
+ }
@SuppressWarnings("unchecked")
public void testEdition() throws Exception {
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("root@localhost", rootUser.getProperties().get("mail"));
// credentials
- byte[] hashedPassword = ("{SHA}" + Base64.encodeBase64String(DigestUtils.sha1("demo".getBytes()))).getBytes();
+ 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));
ByteArrayOutputStream out = new ByteArrayOutputStream();
((LdifUserAdmin) userAdmin).save(out);
byte[] arr = out.toByteArray();
- IOUtils.closeQuietly(out);
+ out.close();
userAdmin.destroy();
- String written = new String(arr);
- System.out.print(written);
+ // String written = new String(arr);
+ // System.out.print(written);
try (ByteArrayInputStream in = new ByteArrayInputStream(arr)) {
userAdmin = new LdifUserAdmin(props);
((LdifUserAdmin) userAdmin).load(in);
@Override
protected void setUp() throws Exception {
Path tempDir = Files.createTempDirectory(getClass().getName());
- URI uri;
- String uriProp = System.getProperty("argeo.useradmin.uri");
+ String uriProp = System.getProperty("argeo.userdirectory.uri");
if (uriProp != null)
uri = new URI(uriProp);
else {
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();
-
- 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();
+ // 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