use of com.unboundid.ldap.sdk.TestUnsolicitedNotificationHandler in project ldapsdk by pingidentity.
the class InMemoryDirectoryServerTestCase method testMaxConnections.
/**
* Tests to ensure that hte server will properly handle a limit on the maximum
* number of concurrent connections that may be established.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test()
public void testMaxConnections() throws Exception {
// Create an in-memory directory server instance with a maximum of five
// concurrent connections.
final InMemoryDirectoryServerConfig cfg = new InMemoryDirectoryServerConfig("dc=example,dc=com");
cfg.setMaxConnections(5);
final InMemoryDirectoryServer ds = new InMemoryDirectoryServer(cfg);
ds.startListening();
final TestUnsolicitedNotificationHandler unHandler = new TestUnsolicitedNotificationHandler();
final LDAPConnectionOptions opts = new LDAPConnectionOptions();
opts.setUnsolicitedNotificationHandler(unHandler);
// Establish five connections and verify that they are all valid.
final ArrayList<LDAPConnection> connList = new ArrayList<LDAPConnection>(5);
for (int i = 0; i < 5; i++) {
final LDAPConnection conn = ds.getConnection(opts);
assertNotNull(conn.getRootDSE());
connList.add(conn);
assertEquals(unHandler.getNotificationCount(), 0);
}
// Try to establish another connection and verify that it isn't valid.
try {
final LDAPConnection conn = ds.getConnection(opts);
conn.getRootDSE();
conn.close();
fail("Expected an exception when trying to get the root DSE over a " + "connection that should have been closed because of the maximum " + "connection limit");
} catch (final LDAPException e) {
// This was expected.
assertEquals(unHandler.getNotificationCount(), 1);
}
// valid.
for (final LDAPConnection conn : connList) {
assertNotNull(conn.getRootDSE());
}
// Close one of the existing connections and verify that we can establish
// only one more new connection.
LDAPConnection conn = connList.remove(3);
assertNotNull(conn);
conn.close();
// Give the server time to register the closure.
Thread.sleep(500L);
conn = ds.getConnection(opts);
assertNotNull(conn.getRootDSE());
connList.add(conn);
try {
conn = ds.getConnection(opts);
conn.getRootDSE();
conn.close();
fail("Expected an exception when trying to get the root DSE over a " + "connection that should have been closed because of the maximum " + "connection limit");
} catch (final LDAPException e) {
assertEquals(unHandler.getNotificationCount(), 2);
}
// Closed all the remaining connections.
for (final LDAPConnection c : connList) {
c.close();
}
connList.clear();
ds.shutDown(true);
}
use of com.unboundid.ldap.sdk.TestUnsolicitedNotificationHandler in project ldapsdk by pingidentity.
the class TransactionExtendedOperationHandlerTestCase method testFailedModifyInTransaction.
/**
* Provides a test case for a transaction in which a modify operation fails
* after other operations that should have succeeded.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test()
public void testFailedModifyInTransaction() throws Exception {
final TestUnsolicitedNotificationHandler unsolicitedNotificationHandler = new TestUnsolicitedNotificationHandler();
final LDAPConnectionOptions connectionOptions = new LDAPConnectionOptions();
connectionOptions.setUnsolicitedNotificationHandler(unsolicitedNotificationHandler);
final InMemoryDirectoryServer ds = getTestDS(true, true);
final LDAPConnection conn = ds.getConnection(connectionOptions);
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final StartTransactionExtendedResult startTxnResult = (StartTransactionExtendedResult) conn.processExtendedOperation(new StartTransactionExtendedRequest());
assertResultCodeEquals(startTxnResult, ResultCode.SUCCESS);
final ASN1OctetString txnID = startTxnResult.getTransactionID();
assertNotNull(txnID);
final TransactionSpecificationRequestControl txnControl = new TransactionSpecificationRequestControl(txnID);
final AddRequest addRequest = new AddRequest("dn: ou=test,dc=example,dc=com", "objectClass: top", "objectClass: organizationalUnit", "ou: test");
addRequest.setControls(txnControl);
assertResultCodeEquals(conn, addRequest, ResultCode.SUCCESS);
final ModifyRequest modifyRequest = new ModifyRequest("dn: ou=Missing,dc=example,dc=com", "changeType: modify", "replace: description", "description: foo");
modifyRequest.setControls(txnControl);
assertResultCodeEquals(conn, modifyRequest, ResultCode.SUCCESS);
final EndTransactionExtendedResult endTxnResult = (EndTransactionExtendedResult) conn.processExtendedOperation(new EndTransactionExtendedRequest(txnID, true));
assertResultCodeEquals(endTxnResult, ResultCode.NO_SUCH_OBJECT);
assertTrue(endTxnResult.getFailedOpMessageID() > 0);
assertEquals(endTxnResult.getFailedOpMessageID(), modifyRequest.getLastMessageID());
assertNotNull(endTxnResult.getOperationResponseControls());
assertTrue(endTxnResult.getOperationResponseControls().isEmpty());
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
conn.close();
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
}
use of com.unboundid.ldap.sdk.TestUnsolicitedNotificationHandler in project ldapsdk by pingidentity.
the class TransactionExtendedOperationHandlerTestCase method testEndTransactionWithControls.
/**
* Tests the behavior when including controls with the end transaction
* extended request.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test()
public void testEndTransactionWithControls() throws Exception {
final TestUnsolicitedNotificationHandler unsolicitedNotificationHandler = new TestUnsolicitedNotificationHandler();
final LDAPConnectionOptions connectionOptions = new LDAPConnectionOptions();
connectionOptions.setUnsolicitedNotificationHandler(unsolicitedNotificationHandler);
final InMemoryDirectoryServer ds = getTestDS(true, true);
final LDAPConnection conn = ds.getConnection(connectionOptions);
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
final StartTransactionExtendedResult startTxnResult = (StartTransactionExtendedResult) conn.processExtendedOperation(new StartTransactionExtendedRequest());
assertResultCodeEquals(startTxnResult, ResultCode.SUCCESS);
final ASN1OctetString txnID = startTxnResult.getTransactionID();
assertNotNull(txnID);
final Control[] controls = { new Control("1.2.3.4", false), new Control("1.2.3.5", true) };
final EndTransactionExtendedResult endTxnResult = (EndTransactionExtendedResult) conn.processExtendedOperation(new EndTransactionExtendedRequest(txnID, true, controls));
assertResultCodeEquals(endTxnResult, ResultCode.UNAVAILABLE_CRITICAL_EXTENSION);
conn.close();
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 1);
}
use of com.unboundid.ldap.sdk.TestUnsolicitedNotificationHandler in project ldapsdk by pingidentity.
the class TransactionExtendedOperationHandlerTestCase method testTransactionWithControls.
/**
* Provides a test case for a completely successful transaction that includes
* request and response controls for the associated operations.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test()
public void testTransactionWithControls() throws Exception {
final TestUnsolicitedNotificationHandler unsolicitedNotificationHandler = new TestUnsolicitedNotificationHandler();
final LDAPConnectionOptions connectionOptions = new LDAPConnectionOptions();
connectionOptions.setUnsolicitedNotificationHandler(unsolicitedNotificationHandler);
final InMemoryDirectoryServer ds = getTestDS(true, true);
final LDAPConnection conn = ds.getConnection(connectionOptions);
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final StartTransactionExtendedResult startTxnResult = (StartTransactionExtendedResult) conn.processExtendedOperation(new StartTransactionExtendedRequest());
assertResultCodeEquals(startTxnResult, ResultCode.SUCCESS);
final ASN1OctetString txnID = startTxnResult.getTransactionID();
assertNotNull(txnID);
final TransactionSpecificationRequestControl txnControl = new TransactionSpecificationRequestControl(txnID);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final AddRequest addRequest = new AddRequest("dn: ou=test,dc=example,dc=com", "objectClass: top", "objectClass: organizationalUnit", "ou: test");
final PostReadRequestControl postReadRequestControl = new PostReadRequestControl("*", "+");
addRequest.setControls(txnControl, postReadRequestControl);
assertResultCodeEquals(conn, addRequest, ResultCode.SUCCESS);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final ModifyRequest modifyRequest = new ModifyRequest("dn: uid=test.user,ou=People,dc=example,dc=com", "changeType: modify", "replace: description", "description: foo");
final PreReadRequestControl preReadRequestControl = new PreReadRequestControl("*", "+");
modifyRequest.setControls(txnControl, preReadRequestControl, postReadRequestControl);
assertResultCodeEquals(conn, modifyRequest, ResultCode.SUCCESS);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final ModifyDNRequest modifyDNRequest = new ModifyDNRequest("uid=test.user,ou=People,dc=example,dc=com", "uid=test.user", false, "ou=test,dc=example,dc=com");
modifyDNRequest.setControls(txnControl, preReadRequestControl, postReadRequestControl);
assertResultCodeEquals(conn, modifyDNRequest, ResultCode.SUCCESS);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final DeleteRequest deleteRequest = new DeleteRequest("ou=People,dc=example,dc=com");
deleteRequest.setControls(txnControl, preReadRequestControl);
assertResultCodeEquals(conn, deleteRequest, ResultCode.SUCCESS);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final EndTransactionExtendedResult endTxnResult = (EndTransactionExtendedResult) conn.processExtendedOperation(new EndTransactionExtendedRequest(txnID, true));
assertResultCodeEquals(endTxnResult, ResultCode.SUCCESS);
assertTrue(endTxnResult.getFailedOpMessageID() < 0);
assertNotNull(endTxnResult.getOperationResponseControls());
assertFalse(endTxnResult.getOperationResponseControls().isEmpty());
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=test,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=test,dc=example,dc=com");
ds.assertEntryMissing("ou=People,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=People,dc=example,dc=com");
final Control[] addControls = endTxnResult.getOperationResponseControls(addRequest.getLastMessageID());
assertNotNull(addControls);
assertEquals(addControls.length, 1);
assertTrue(addControls[0] instanceof PostReadResponseControl);
final Control[] modifyControls = endTxnResult.getOperationResponseControls(modifyRequest.getLastMessageID());
assertNotNull(modifyControls);
assertEquals(modifyControls.length, 2);
assertTrue(modifyControls[0] instanceof PreReadResponseControl);
assertTrue(modifyControls[1] instanceof PostReadResponseControl);
final Control[] modifyDNControls = endTxnResult.getOperationResponseControls(modifyDNRequest.getLastMessageID());
assertNotNull(modifyDNControls);
assertEquals(modifyDNControls.length, 2);
assertTrue(modifyDNControls[0] instanceof PreReadResponseControl);
assertTrue(modifyDNControls[1] instanceof PostReadResponseControl);
final Control[] deleteControls = endTxnResult.getOperationResponseControls(deleteRequest.getLastMessageID());
assertNotNull(deleteControls);
assertEquals(deleteControls.length, 1);
assertTrue(deleteControls[0] instanceof PreReadResponseControl);
conn.close();
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
}
use of com.unboundid.ldap.sdk.TestUnsolicitedNotificationHandler in project ldapsdk by pingidentity.
the class TransactionExtendedOperationHandlerTestCase method testFailedAddInTransaction.
/**
* Provides a test case for a transaction in which an add operation fails
* after other operations that should have succeeded.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test()
public void testFailedAddInTransaction() throws Exception {
final TestUnsolicitedNotificationHandler unsolicitedNotificationHandler = new TestUnsolicitedNotificationHandler();
final LDAPConnectionOptions connectionOptions = new LDAPConnectionOptions();
connectionOptions.setUnsolicitedNotificationHandler(unsolicitedNotificationHandler);
final InMemoryDirectoryServer ds = getTestDS(true, true);
final LDAPConnection conn = ds.getConnection(connectionOptions);
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
final StartTransactionExtendedResult startTxnResult = (StartTransactionExtendedResult) conn.processExtendedOperation(new StartTransactionExtendedRequest());
assertResultCodeEquals(startTxnResult, ResultCode.SUCCESS);
final ASN1OctetString txnID = startTxnResult.getTransactionID();
assertNotNull(txnID);
final TransactionSpecificationRequestControl txnControl = new TransactionSpecificationRequestControl(txnID);
final AddRequest addRequest1 = new AddRequest("dn: ou=test,dc=example,dc=com", "objectClass: top", "objectClass: organizationalUnit", "ou: test");
addRequest1.setControls(txnControl);
assertResultCodeEquals(conn, addRequest1, ResultCode.SUCCESS);
final AddRequest addRequest2 = new AddRequest("dn: ou=test2,ou=missing,dc=example,dc=com", "objectClass: top", "objectClass: organizationalUnit", "ou: test");
addRequest2.setControls(txnControl);
assertResultCodeEquals(conn, addRequest2, ResultCode.SUCCESS);
final EndTransactionExtendedResult endTxnResult = (EndTransactionExtendedResult) conn.processExtendedOperation(new EndTransactionExtendedRequest(txnID, true));
assertResultCodeEquals(endTxnResult, ResultCode.NO_SUCH_OBJECT);
assertTrue(endTxnResult.getFailedOpMessageID() > 0);
assertEquals(endTxnResult.getFailedOpMessageID(), addRequest2.getLastMessageID());
assertNotNull(endTxnResult.getOperationResponseControls());
assertTrue(endTxnResult.getOperationResponseControls().isEmpty());
ds.assertEntryExists("dc=example,dc=com");
ds.assertEntryExists("ou=People,dc=example,dc=com");
ds.assertEntryExists("uid=test.user,ou=People,dc=example,dc=com");
ds.assertEntryMissing("ou=test,dc=example,dc=com");
ds.assertEntryMissing("uid=test.user,ou=test,dc=example,dc=com");
conn.close();
assertEquals(unsolicitedNotificationHandler.getNotificationCount(), 0);
}
Aggregations