Skip to content

Commit d1c5a43

Browse files
committed
[java] Add missing grid status tests
1 parent 966f461 commit d1c5a43

1 file changed

Lines changed: 89 additions & 2 deletions

File tree

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

Lines changed: 89 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,36 @@
1717

1818
package org.openqa.selenium.grid.router;
1919

20+
import static org.assertj.core.api.Assertions.assertThat;
21+
import static org.assertj.core.api.Assertions.fail;
2022
import static org.junit.Assert.assertEquals;
2123
import static org.junit.Assert.assertFalse;
2224
import static org.junit.Assert.assertNotNull;
25+
import static org.junit.Assert.assertTrue;
2326
import static org.openqa.selenium.grid.data.Availability.DOWN;
2427
import static org.openqa.selenium.grid.data.Availability.UP;
2528
import static org.openqa.selenium.json.Json.MAP_TYPE;
2629
import static org.openqa.selenium.remote.http.Contents.reader;
30+
import static org.openqa.selenium.remote.Dialect.OSS;
31+
import static org.openqa.selenium.remote.Dialect.W3C;
2732
import static org.openqa.selenium.remote.http.HttpMethod.GET;
2833

34+
import com.google.common.collect.ImmutableMap;
35+
import com.google.common.collect.ImmutableSet;
36+
2937
import org.junit.Before;
3038
import org.junit.Test;
3139
import org.openqa.selenium.Capabilities;
3240
import org.openqa.selenium.ImmutableCapabilities;
41+
import org.openqa.selenium.SessionNotCreatedException;
3342
import org.openqa.selenium.events.EventBus;
3443
import org.openqa.selenium.events.local.GuavaEventBus;
3544
import org.openqa.selenium.grid.data.Availability;
45+
import org.openqa.selenium.grid.data.CreateSessionResponse;
3646
import org.openqa.selenium.grid.data.DefaultSlotMatcher;
47+
import org.openqa.selenium.grid.data.RequestId;
3748
import org.openqa.selenium.grid.data.Session;
49+
import org.openqa.selenium.grid.data.SessionRequest;
3850
import org.openqa.selenium.grid.distributor.Distributor;
3951
import org.openqa.selenium.grid.distributor.local.LocalDistributor;
4052
import org.openqa.selenium.grid.distributor.selector.DefaultSlotSelector;
@@ -52,6 +64,7 @@
5264
import org.openqa.selenium.grid.web.Values;
5365
import org.openqa.selenium.json.Json;
5466
import org.openqa.selenium.json.JsonInput;
67+
import org.openqa.selenium.internal.Either;
5568
import org.openqa.selenium.remote.http.HttpClient;
5669
import org.openqa.selenium.remote.http.HttpRequest;
5770
import org.openqa.selenium.remote.http.HttpResponse;
@@ -65,7 +78,9 @@
6578
import java.net.URISyntaxException;
6679
import java.time.Duration;
6780
import java.time.Instant;
81+
import java.util.List;
6882
import java.util.Map;
83+
import java.util.UUID;
6984
import java.util.concurrent.atomic.AtomicReference;
7085

7186
public class RouterTest {
@@ -214,13 +229,85 @@ public void aNodeThatIsUpAndHasSpareSessionsMeansTheGridIsReady() throws URISynt
214229
}
215230

216231
@Test
217-
public void shouldListAllNodesTheDistributorIsAwareOf() {
232+
public void shouldListAllNodesTheDistributorIsAwareOf() throws URISyntaxException, IOException {
233+
Capabilities chromeCapabilities = new ImmutableCapabilities("browser", "chrome");
234+
Capabilities firefoxCapabilities = new ImmutableCapabilities("browser", "firefox");
235+
URI firstNodeUri = new URI("http://example1.com");
236+
URI secondNodeUri = new URI("http://example2.com");
237+
238+
AtomicReference<Availability> isUp = new AtomicReference<>(UP);
239+
240+
Node firstNode = LocalNode.builder(tracer, bus, firstNodeUri, firstNodeUri, registrationSecret)
241+
.add(chromeCapabilities, new TestSessionFactory((id, caps) -> new Session(id, firstNodeUri, new ImmutableCapabilities(), caps, Instant.now())))
242+
.advanced()
243+
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
244+
.build();
245+
246+
Node secondNode = LocalNode.builder(tracer, bus, secondNodeUri, secondNodeUri, registrationSecret)
247+
.add(firefoxCapabilities, new TestSessionFactory((id, caps) -> new Session(id, secondNodeUri, new ImmutableCapabilities(), caps, Instant.now())))
248+
.advanced()
249+
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
250+
.build();
251+
252+
distributor.add(firstNode);
253+
distributor.add(secondNode);
254+
255+
waitUntilReady(router, Duration.ofSeconds(5));
256+
257+
Map<String, Object> status = getStatus(router);
258+
List<Map<String,Object>> nodes = (List<Map<String, Object>>) status.get("nodes");
259+
260+
assertEquals(2, nodes.size());
218261

262+
String firstNodeId = (String) nodes.get(0).get("id");
263+
String secondNodeId = (String) nodes.get(1).get("id");
264+
265+
assertFalse(firstNodeId.equals(secondNodeId));
219266
}
220267

221268
@Test
222-
public void ifNodesHaveSpareSlotsButAlreadyHaveMaxSessionsGridIsNotReady() {
269+
public void ifNodesHaveSpareSlotsButAlreadyHaveMaxSessionsGridIsReady()
270+
throws URISyntaxException, IOException {
271+
Capabilities chromeCapabilities = new ImmutableCapabilities("browser", "chrome");
272+
Capabilities firefoxCapabilities = new ImmutableCapabilities("browser", "firefox");
273+
URI uri = new URI("http://example.com");
274+
275+
AtomicReference<Availability> isUp = new AtomicReference<>(UP);
276+
277+
Node node = LocalNode.builder(tracer, bus, uri, uri, registrationSecret)
278+
.add(chromeCapabilities, new TestSessionFactory(
279+
(id, caps) -> new Session(id, uri, new ImmutableCapabilities(), caps, Instant.now())))
280+
.add(firefoxCapabilities, new TestSessionFactory(
281+
(id, caps) -> new Session(id, uri, new ImmutableCapabilities(), caps, Instant.now())))
282+
.maximumConcurrentSessions(1)
283+
.advanced()
284+
.healthCheck(() -> new HealthCheck.Result(isUp.get(), "TL;DR"))
285+
.build();
286+
distributor.add(node);
223287

288+
waitUntilReady(router, Duration.ofSeconds(5));
289+
290+
Map<String, Object> status = getStatus(router);
291+
assertTrue(status.toString(), (Boolean) status.get("ready"));
292+
293+
SessionRequest sessionRequest = new SessionRequest(
294+
new RequestId(UUID.randomUUID()),
295+
Instant.now(),
296+
ImmutableSet.of(OSS, W3C),
297+
ImmutableSet.of(chromeCapabilities),
298+
ImmutableMap.of(),
299+
ImmutableMap.of());
300+
301+
Either<SessionNotCreatedException, CreateSessionResponse> response =
302+
distributor.newSession(sessionRequest);
303+
304+
if (response.isRight()) {
305+
Session session = response.right().getSession();
306+
assertThat(session).isNotNull();
307+
assertTrue(status.toString(), (Boolean) status.get("ready"));
308+
} else {
309+
fail("Session creation failed", response.left());
310+
}
224311
}
225312

226313
private Map<String, Object> getStatus(Router router) throws IOException {

0 commit comments

Comments
 (0)