Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

Expand Down Expand Up @@ -273,24 +272,24 @@ private void testSelectStampede(final Predicate<TestLoadBalancedConnection> sele

@Test
void roundRobining() throws Exception {
assumeTrue(isRoundRobin());

sendServiceDiscoveryEvents(upEvent("address-1"));
sendServiceDiscoveryEvents(upEvent("address-2"));
final List<String> connections = awaitIndefinitely((lb.selectConnection(any(), null)
.concat(lb.selectConnection(any(), null))
.concat(lb.selectConnection(any(), null))
.concat(lb.selectConnection(any(), null))
.concat(lb.selectConnection(any(), null))
.map(TestLoadBalancedConnection::address)));

assertThat(connections, contains("address-1", "address-2", "address-1", "address-2", "address-1"));

assertConnectionCount(lb.usedAddresses(),
connectionsCount("address-1", 1),
connectionsCount("address-2", 1));

assertThat(connectionsCreated, hasSize(2));
if (isRoundRobin()) {
sendServiceDiscoveryEvents(upEvent("address-1"));
sendServiceDiscoveryEvents(upEvent("address-2"));
final List<String> connections = awaitIndefinitely((lb.selectConnection(any(), null)
.concat(lb.selectConnection(any(), null))
.concat(lb.selectConnection(any(), null))
.concat(lb.selectConnection(any(), null))
.concat(lb.selectConnection(any(), null))
.map(TestLoadBalancedConnection::address)));

assertThat(connections, contains("address-1", "address-2", "address-1", "address-2", "address-1"));

assertConnectionCount(lb.usedAddresses(),
connectionsCount("address-1", 1),
connectionsCount("address-2", 1));

assertThat(connectionsCreated, hasSize(2));
}
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.junit.jupiter.api.extension.RegisterExtension;

import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
Expand All @@ -51,7 +52,7 @@
import static io.servicetalk.concurrent.api.Single.succeeded;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.both;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.emptyIterable;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.hasSize;
Expand Down Expand Up @@ -169,19 +170,16 @@ static <T> void assertConnectionCount(
.collect(Collectors.toList())
.toArray(new Matcher[] {});
final Matcher<Iterable<? extends T>> iterableMatcher =
addressAndConnCount.length == 0 ? emptyIterable() : contains(args);
addressAndConnCount.length == 0 ? emptyIterable() : containsInAnyOrder(args);
assertThat(addresses, iterableMatcher);
}

<T> void assertAddresses(Iterable<T> addresses, String... address) {
@SuppressWarnings("unchecked")
final Matcher<? super T>[] args = (Matcher<? super T>[]) Arrays.stream(address)
.map(a -> hasProperty("key", is(a)))
.collect(Collectors.toList())
.toArray(new Matcher[] {});
final Matcher<Iterable<? extends T>> iterableMatcher =
address.length == 0 ? emptyIterable() : contains(args);
assertThat(addresses, iterableMatcher);
<T extends Map.Entry<String, ?>> void assertAddresses(Iterable<T> addresses, String... address) {
List<String> actualKeys = new ArrayList<>();
for (T item : addresses) {
actualKeys.add(item.getKey());
}
assertThat(actualKeys, containsInAnyOrder(address));
}

Map.Entry<String, Integer> connectionsCount(String addr, int count) {
Expand Down