use of org.forgerock.openam.sm.ConnectionConfig in project OpenAM by OpenRock.
the class LdapConnectionFactoryProvider method createFactory.
/**
* Creates instances of ConnectionFactory which are aware of the need to share the
* DataLayer and CTS connections in the same connection pool.
*
* @return {@inheritDoc}
*/
public ConnectionFactory<Connection> createFactory() throws InvalidConfigurationException {
ConnectionConfig config = configFactory.getConfig(connectionType);
int timeout = timeoutConfig.getTimeout(connectionType);
Options options = Options.defaultOptions().set(REQUEST_TIMEOUT, new Duration((long) timeout, TimeUnit.SECONDS));
debug("Creating Embedded Factory:\nURL: {0}\nMax Connections: {1}\nHeartbeat: {2}\nOperation Timeout: {3}", config.getLDAPURLs(), config.getMaxConnections(), config.getLdapHeartbeat(), timeout);
final org.forgerock.opendj.ldap.ConnectionFactory ldapConnectionFactory = LDAPUtils.newFailoverConnectionPool(config.getLDAPURLs(), config.getBindDN(), config.getBindPassword(), config.getMaxConnections(), config.getLdapHeartbeat(), SECONDS.toString(), options);
return new LdapConnectionFactory(ldapConnectionFactory);
}
use of org.forgerock.openam.sm.ConnectionConfig in project OpenAM by OpenRock.
the class PooledTaskExecutorTest method testExecute.
@Test
public void testExecute() throws Exception {
// Given
ConnectionConfigFactory configFactory = mock(ConnectionConfigFactory.class);
ConnectionConfig config = mock(ConnectionConfig.class);
when(configFactory.getConfig(any(ConnectionType.class))).thenReturn(config);
when(config.getMaxConnections()).thenReturn(2);
Debug debug = mock(Debug.class);
when(debug.messageEnabled()).thenReturn(true);
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) throws Throwable {
System.out.println(Thread.currentThread().getName() + ":: " + invocation.getArguments()[0]);
return null;
}
}).when(debug).message(anyString());
Provider<SimpleTaskExecutor> simpleTaskExecutorProvider = mock(Provider.class);
when(simpleTaskExecutorProvider.get()).thenAnswer(new Answer<SimpleTaskExecutor<?>>() {
public SimpleTaskExecutor<?> answer(InvocationOnMock invocation) throws Throwable {
return new SimpleTaskExecutor<Object>(mock(ConnectionFactory.class), null, null);
}
});
Semaphore semaphore = new Semaphore(2, true);
// When
final TaskExecutor executor = new PooledTaskExecutor(simpleTaskExecutorProvider, debug, ConnectionType.RESOURCE_SETS, configFactory, semaphore);
LongTask longTask1 = new LongTask();
TaskThread task1 = new TaskThread(1, executor, longTask1);
LongTask longTask2 = new LongTask();
TaskThread task2 = new TaskThread(2, executor, longTask2);
TaskThread task3 = new TaskThread(3, executor, mock(Task.class));
debug("Starting task 1");
task1.start();
debug("Starting task 2");
task2.start();
while (semaphore.availablePermits() > 0) {
debug("Waiting for no available permits. Currently got: {0}", semaphore.availablePermits());
Thread.sleep(50);
}
debug("Tasks 1 and 2 should now be executing and will shortly be blocked - starting task 3");
task3.start();
long timeout = System.currentTimeMillis() + 5000;
while (!semaphore.hasQueuedThreads()) {
debug("Waiting for task 3 to be queued on semaphore");
Thread.sleep(50);
if (System.currentTimeMillis() > timeout) {
fail("Where did my thread go?");
}
}
debug("Task 3 now queued on semaphore");
// Then
verifyZeroInteractions(task3.task);
// When
debug("Unblocking task 2");
longTask2.unblock();
debug("Unblocking task 1");
longTask1.unblock();
// Then
debug("Waiting for tasks to complete");
task1.join(TimeUnit.SECONDS.toMillis(10));
task2.join(TimeUnit.SECONDS.toMillis(10));
task3.join(TimeUnit.SECONDS.toMillis(10));
assertThat(task1.isAlive()).as("Task 1 thread running").isFalse();
assertThat(task2.isAlive()).as("Task 2 thread running").isFalse();
assertThat(task3.isAlive()).as("Task 3 thread running").isFalse();
verify(task3.task).execute(null, null);
verify(simpleTaskExecutorProvider, times(2)).get();
assertThat(semaphore.availablePermits()).isEqualTo(2);
}
use of org.forgerock.openam.sm.ConnectionConfig in project OpenAM by OpenRock.
the class ConnectionConfigFactoryTest method shouldReturnConfigForDefaultStoreMode.
@Test
public void shouldReturnConfigForDefaultStoreMode() throws InvalidConfigurationException {
// given
ConnectionConfigFactory factory = new ConnectionConfigFactory(mockDataLayerConfig, mockExternalCTSConfig, mockDataLayerConfiguration, mockConfigurationValidator);
when(mockDataLayerConfiguration.getStoreMode()).thenReturn(StoreMode.DEFAULT);
// when
ConnectionConfig config = factory.getConfig(null);
config.getLDAPURLs();
config.getBindDN();
config.getBindPassword();
config.getLdapHeartbeat();
config.getMaxConnections();
// then
verify(mockDataLayerConfig).getLDAPURLs();
verify(mockDataLayerConfig).getBindDN();
verify(mockDataLayerConfig).getBindPassword();
verify(mockDataLayerConfig).getLdapHeartbeat();
verify(mockDataLayerConfig, never()).getMaxConnections();
verify(mockExternalCTSConfig).getMaxConnections();
}
use of org.forgerock.openam.sm.ConnectionConfig in project OpenAM by OpenRock.
the class ConnectionConfigFactoryTest method shouldReturnConfigForExternalStoreMode.
@Test
public void shouldReturnConfigForExternalStoreMode() throws InvalidConfigurationException {
// given
ConnectionConfigFactory factory = new ConnectionConfigFactory(mockDataLayerConfig, mockExternalCTSConfig, mockDataLayerConfiguration, mockConfigurationValidator);
when(mockDataLayerConfiguration.getStoreMode()).thenReturn(StoreMode.EXTERNAL);
// when
ConnectionConfig config = factory.getConfig(null);
// then
assertThat(config).isSameAs(mockExternalCTSConfig);
}
Aggregations