assertEquals(op2.getResultCode(), ResultCode.SUCCESS,
op2.getErrorMessage().toString());
replicationServer.clearDb();
LDIFWriter ldifWriter = null;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
LDIFExportConfig exportConfig = new LDIFExportConfig(stream);
try
{
ldifWriter = new LDIFWriter(exportConfig);
}
catch (Exception e){}
debugInfo("Create broker");
server1 = openReplicationSession(
DN.decode(TEST_ROOT_DN_STRING), 1, 100, replicationServerPort,
1000, true);
assertTrue(server1.isConnected());
debugInfo("Publish changes");
List<UpdateMsg> msgs = createChanges(TEST_ROOT_DN_STRING, 1);
for(UpdateMsg msg : msgs )
{
server1.publish(msg);
}
Thread.sleep(500);
// Sets manually the association backend-replication server since
// no config object exist for our replication server.
ReplicationBackend b =
(ReplicationBackend)DirectoryServer.getBackend("replicationChanges");
b.setServer(replicationServer);
assertEquals(b.getEntryCount(), msgs.size());
assertTrue(b.entryExists(DN.decode("dc=replicationChanges")));
SearchFilter filter=SearchFilter.createFilterFromString("(objectclass=*)");
assertTrue(b.isIndexed(filter));
InternalClientConnection conn =
InternalClientConnection.getRootConnection();
LinkedList<Control> requestControls = new LinkedList<Control>();
requestControls.add(new LDAPControl(OID_INTERNAL_GROUP_MEMBERSHIP_UPDATE,
false));
DN baseDN=DN.decode("dc=replicationChanges");
//Test the group membership control causes search to be skipped.
InternalSearchOperation internalSearch =
new InternalSearchOperation(
conn, InternalClientConnection.nextOperationID(),
InternalClientConnection.nextMessageID(), requestControls,
baseDN,
SearchScope.WHOLE_SUBTREE,
DereferencePolicy.NEVER_DEREF_ALIASES,
0, 0, false, filter, null, null);
internalSearch.run();
assertTrue(internalSearch.getResultCode() == ResultCode.SUCCESS);
assertTrue(internalSearch.getSearchEntries().isEmpty());
// General search
InternalSearchOperation op = connection.processSearch(
ByteString.valueOf("dc=oops"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(changetype=*)"));
assertEquals(op.getResultCode(), ResultCode.NO_SUCH_OBJECT);
// TODO: testReplicationBackendACIs() is disabled because it
// is currently failing when run in the nightly target.
// anonymous search returns entries from replication backend whereas it
// should not. Probably a previous test in the nightlytests suite is
// removing/modifying some ACIs...When problem foound, we have to re-enable
// this test.
// testReplicationBackendACIs();
// General search
op = connection.processSearch(
ByteString.valueOf("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(changetype=*)"));
debugInfo("Search result");
LinkedList<SearchResultEntry> entries = op.getSearchEntries();
if (entries != null)
{
for (SearchResultEntry entry : entries)
{
debugInfo(entry.toLDIFString());
ldifWriter.writeEntry(entry);
}
}
debugInfo("\n" + stream.toString());
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertEquals(op.getSearchEntries().size(), 5);
debugInfo("Query / filter based on changetype");
op = connection.processSearch(
ByteString.valueOf("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(changetype=add)"));
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertTrue(op.getSearchEntries().size() == 2);
op = connection.processSearch(
ByteString.valueOf("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(changetype=modify)"));
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertTrue(op.getSearchEntries().size() == 1);
op = connection.processSearch(
ByteString.valueOf("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(changetype=moddn)"));
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertTrue(op.getSearchEntries().size() == 1);
op = connection.processSearch(
ByteString.valueOf("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(changetype=delete)"));
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertTrue(op.getSearchEntries().size() == 1);
debugInfo("Query / filter based on objectclass");
op = connection.processSearch(
ByteString.valueOf("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
LDAPFilter.decode("(objectclass=person)"));
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertEquals(op.getSearchEntries().size(), 1);
/*
* It would be nice to be have the abilities to search for
* entries in the replication backend using the DN on which the
* operation was done as the search criteria.
* This is not possible yet, this part of the test is therefore
* disabled.
*
* debugInfo("Query / searchBase");
* op = connection.processSearch(
* ByteString.valueOf("uid=new person,ou=People,dc=example,dc=com,dc=replicationChanges"),
* SearchScope.WHOLE_SUBTREE,
* LDAPFilter.decode("(changetype=*)"));
* assertEquals(op.getResultCode(), ResultCode.SUCCESS);
* assertEquals(op.getSearchEntries().size(), 2);
*/
debugInfo("Query / 1 attrib");
LinkedHashSet<String> attrs = new LinkedHashSet<String>(1);
attrs.add("newrdn");
SearchFilter ALLMATCH;
ALLMATCH = SearchFilter.createFilterFromString("(changetype=moddn)");
op =
connection.processSearch(DN.decode("dc=replicationChanges"),
SearchScope.WHOLE_SUBTREE,
DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false, ALLMATCH,
attrs);
assertEquals(op.getResultCode(), ResultCode.SUCCESS);
assertEquals(op.getSearchEntries().size(), 1);
entries = op.getSearchEntries();
if (entries != null)
{
for (SearchResultEntry entry : entries)
{
debugInfo(entry.toLDIFString());
ldifWriter.writeEntry(entry);
}
}
debugInfo("Query / All attribs");
LinkedHashSet<String> attrs2 = new LinkedHashSet<String>(1);