}
@Test
public void testGetConnectionFromTheLastStrategy() throws SQLException {
final ConnectionAcquiringStrategy otherConnectionAcquiringStrategy = Mockito.mock(ConnectionAcquiringStrategy.class);
this.flexyPoolDataSource = new FlexyPoolDataSource<DataSource>(configuration, new ConnectionAcquiringStrategyFactory() {
@Override
public ConnectionAcquiringStrategy newInstance(ConfigurationProperties configurationProperties) {
return connectionAcquiringStrategy;
}
}, new ConnectionAcquiringStrategyFactory() {
@Override
public ConnectionAcquiringStrategy newInstance(ConfigurationProperties configurationProperties) {
return otherConnectionAcquiringStrategy;
}
}
);
when(connectionAcquiringStrategy.getConnection(any(ConnectionRequestContext.class))).thenThrow(new AcquireTimeoutException(new SQLException()));
ArgumentCaptor<ConnectionRequestContext> connectionRequestContextArgumentCaptor
= ArgumentCaptor.forClass(ConnectionRequestContext.class);
when(otherConnectionAcquiringStrategy.getConnection(connectionRequestContextArgumentCaptor.capture()))
.thenReturn(connection);
verify(connection, never()).getMetaData();
flexyPoolDataSource.getConnection().getMetaData();
verify(connection, times(1)).getMetaData();
assertNull(connectionRequestContextArgumentCaptor.getValue().getCredentials());