Skip to content

Commit a9c56bd

Browse files
committed
[java] Making router test more stable by waiting for readiness
1 parent 78eca82 commit a9c56bd

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

java/server/test/org/openqa/selenium/grid/router/RouterTest.java

+27-17
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.openqa.selenium.remote.http.HttpResponse;
4646
import org.openqa.selenium.remote.tracing.DefaultTestTracer;
4747
import org.openqa.selenium.remote.tracing.Tracer;
48+
import org.openqa.selenium.support.ui.FluentWait;
4849

4950
import java.net.URI;
5051
import java.net.URISyntaxException;
@@ -55,7 +56,6 @@
5556

5657
import static org.junit.Assert.assertFalse;
5758
import static org.junit.Assert.assertNotNull;
58-
import static org.junit.Assert.assertTrue;
5959
import static org.openqa.selenium.grid.data.Availability.DOWN;
6060
import static org.openqa.selenium.grid.data.Availability.UP;
6161
import static org.openqa.selenium.json.Json.MAP_TYPE;
@@ -94,12 +94,12 @@ public void setUp() {
9494
handler.addHandler(queuer);
9595

9696
distributor = new LocalDistributor(
97-
tracer,
98-
bus,
99-
clientFactory,
100-
sessions,
101-
queuer,
102-
registrationSecret);
97+
tracer,
98+
bus,
99+
clientFactory,
100+
sessions,
101+
queuer,
102+
registrationSecret);
103103
handler.addHandler(distributor);
104104

105105
router = new Router(tracer, clientFactory, sessions, queuer, distributor);
@@ -119,10 +119,10 @@ public void addingANodeThatIsDownMeansTheGridIsNotReady() throws URISyntaxExcept
119119
AtomicReference<Availability> isUp = new AtomicReference<>(DOWN);
120120

121121
Node node = LocalNode.builder(tracer, bus, uri, uri, registrationSecret)
122-
.add(capabilities, new TestSessionFactory((id, caps) -> new Session(id, uri, new ImmutableCapabilities(), caps, Instant.now())))
123-
.advanced()
124-
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
125-
.build();
122+
.add(capabilities, new TestSessionFactory((id, caps) -> new Session(id, uri, new ImmutableCapabilities(), caps, Instant.now())))
123+
.advanced()
124+
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
125+
.build();
126126
distributor.add(node);
127127

128128
Map<String, Object> status = getStatus(router);
@@ -137,14 +137,13 @@ public void aNodeThatIsUpAndHasSpareSessionsMeansTheGridIsReady() throws URISynt
137137
AtomicReference<Availability> isUp = new AtomicReference<>(UP);
138138

139139
Node node = LocalNode.builder(tracer, bus, uri, uri, registrationSecret)
140-
.add(capabilities, new TestSessionFactory((id, caps) -> new Session(id, uri, new ImmutableCapabilities(), caps, Instant.now())))
141-
.advanced()
142-
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
143-
.build();
140+
.add(capabilities, new TestSessionFactory((id, caps) -> new Session(id, uri, new ImmutableCapabilities(), caps, Instant.now())))
141+
.advanced()
142+
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
143+
.build();
144144
distributor.add(node);
145145

146-
Map<String, Object> status = getStatus(router);
147-
assertTrue(status.toString(), (Boolean) status.get("ready"));
146+
waitUntilReady(router, Duration.ofSeconds(5));
148147
}
149148

150149
@Test
@@ -163,4 +162,15 @@ private Map<String, Object> getStatus(Router router) {
163162
assertNotNull(status);
164163
return status;
165164
}
165+
166+
private static void waitUntilReady(Router router, Duration duration) {
167+
new FluentWait<>(router)
168+
.withTimeout(duration)
169+
.pollingEvery(Duration.ofMillis(100))
170+
.until(r -> {
171+
HttpResponse response = r.execute(new HttpRequest(GET, "/status"));
172+
Map<String, Object> status = Values.get(response, MAP_TYPE);
173+
return Boolean.TRUE.equals(status.get("ready"));
174+
});
175+
}
166176
}

0 commit comments

Comments
 (0)