#7461 Adapt other tests to use less strict assertion for expiring pool

Signed-off-by: Ludovic Orban <lorban@bitronix.be>
This commit is contained in:
Ludovic Orban 2022-02-11 12:14:37 +01:00
parent 4382bc122e
commit a6cd037923
1 changed files with 24 additions and 15 deletions

View File

@ -77,11 +77,6 @@ public class ConnectionPoolTest
return Stream.of(DUPLEX, MULTIPLEX, RANDOM, DUPLEX_MAX_DURATION, ROUND_ROBIN); return Stream.of(DUPLEX, MULTIPLEX, RANDOM, DUPLEX_MAX_DURATION, ROUND_ROBIN);
} }
public static Stream<ConnectionPoolFactory> poolsNoMaxDuration()
{
return Stream.of(DUPLEX, MULTIPLEX, RANDOM, ROUND_ROBIN);
}
public static Stream<ConnectionPoolFactory> poolsNoRoundRobin() public static Stream<ConnectionPoolFactory> poolsNoRoundRobin()
{ {
return Stream.of(DUPLEX, MULTIPLEX, RANDOM, DUPLEX_MAX_DURATION); return Stream.of(DUPLEX, MULTIPLEX, RANDOM, DUPLEX_MAX_DURATION);
@ -381,8 +376,7 @@ public class ConnectionPoolTest
} }
@ParameterizedTest @ParameterizedTest
// Connection pool aggressively closes expired connections upon release, which interferes with this test's assertion. @MethodSource("pools")
@MethodSource("poolsNoMaxDuration")
public void testConcurrentRequestsAllBlockedOnServerWithLargeConnectionPool(ConnectionPoolFactory factory) throws Exception public void testConcurrentRequestsAllBlockedOnServerWithLargeConnectionPool(ConnectionPoolFactory factory) throws Exception
{ {
int count = 50; int count = 50;
@ -390,8 +384,7 @@ public class ConnectionPoolTest
} }
@ParameterizedTest @ParameterizedTest
// Connection pool aggressively closes expired connections upon release, which interferes with this test's assertion. @MethodSource("pools")
@MethodSource("poolsNoMaxDuration")
public void testConcurrentRequestsAllBlockedOnServerWithExactConnectionPool(ConnectionPoolFactory factory) throws Exception public void testConcurrentRequestsAllBlockedOnServerWithExactConnectionPool(ConnectionPoolFactory factory) throws Exception
{ {
int count = 50; int count = 50;
@ -454,9 +447,13 @@ public class ConnectionPoolTest
assertTrue(latch.await(5, TimeUnit.SECONDS), "server requests " + barrier.getNumberWaiting() + "<" + count + " - client: " + client.dump()); assertTrue(latch.await(5, TimeUnit.SECONDS), "server requests " + barrier.getNumberWaiting() + "<" + count + " - client: " + client.dump());
List<Destination> destinations = client.getDestinations(); List<Destination> destinations = client.getDestinations();
assertEquals(1, destinations.size()); assertEquals(1, destinations.size());
HttpDestination destination = (HttpDestination)destinations.get(0); // The max duration connection pool aggressively closes expired connections upon release, which interferes with this assertion.
AbstractConnectionPool connectionPool = (AbstractConnectionPool)destination.getConnectionPool(); if (DUPLEX_MAX_DURATION != factory)
assertThat(connectionPool.getConnectionCount(), Matchers.greaterThanOrEqualTo(count)); {
HttpDestination destination = (HttpDestination)destinations.get(0);
AbstractConnectionPool connectionPool = (AbstractConnectionPool)destination.getConnectionPool();
assertThat(connectionPool.getConnectionCount(), Matchers.greaterThanOrEqualTo(count));
}
} }
@Test @Test
@ -593,8 +590,17 @@ public class ConnectionPoolTest
AbstractConnectionPool connectionPool = (AbstractConnectionPool)destination.getConnectionPool(); AbstractConnectionPool connectionPool = (AbstractConnectionPool)destination.getConnectionPool();
assertEquals(0, connectionPool.getActiveConnectionCount()); assertEquals(0, connectionPool.getActiveConnectionCount());
assertEquals(1, connectionPool.getIdleConnectionCount()); if (DUPLEX_MAX_DURATION == factory)
assertEquals(1, connectionPool.getConnectionCount()); {
// The connections can expire upon release.
assertThat(connectionPool.getIdleConnectionCount(), lessThanOrEqualTo(1));
assertThat(connectionPool.getConnectionCount(), lessThanOrEqualTo(1));
}
else
{
assertThat(connectionPool.getIdleConnectionCount(), is(1));
assertThat(connectionPool.getConnectionCount(), is(1));
}
// Send second request, max usage count will be reached, // Send second request, max usage count will be reached,
// the only connection must be closed. // the only connection must be closed.
@ -630,7 +636,10 @@ public class ConnectionPoolTest
// Trigger the creation of a destination, that will create the connection pool. // Trigger the creation of a destination, that will create the connection pool.
HttpDestination destination = client.resolveDestination(new Origin("http", "localhost", connector.getLocalPort())); HttpDestination destination = client.resolveDestination(new Origin("http", "localhost", connector.getLocalPort()));
AbstractConnectionPool connectionPool = (AbstractConnectionPool)destination.getConnectionPool(); AbstractConnectionPool connectionPool = (AbstractConnectionPool)destination.getConnectionPool();
assertEquals(1, connectionPool.getConnectionCount()); if (DUPLEX_MAX_DURATION == factory)
assertThat(connectionPool.getConnectionCount(), lessThanOrEqualTo(1)); // The connections can expire upon release.
else
assertThat(connectionPool.getConnectionCount(), is(1));
// Wait for the pre-created connections to idle timeout. // Wait for the pre-created connections to idle timeout.
Thread.sleep(idleTimeout + idleTimeout / 2); Thread.sleep(idleTimeout + idleTimeout / 2);