Skip to content

Commit ec6dc92

Browse files
committed
Make the return type of NewSessionQueue.getQueuedRequests strongly typed
1 parent e33ed59 commit ec6dc92

File tree

8 files changed

+32
-17
lines changed

8 files changed

+32
-17
lines changed

java/server/src/org/openqa/selenium/grid/graphql/Grid.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.google.common.base.Suppliers;
2121
import com.google.common.collect.ImmutableList;
2222
import org.openqa.selenium.Capabilities;
23+
import org.openqa.selenium.ImmutableCapabilities;
2324
import org.openqa.selenium.grid.data.DistributorStatus;
2425
import org.openqa.selenium.grid.data.NodeStatus;
2526
import org.openqa.selenium.grid.data.Slot;
@@ -34,6 +35,7 @@
3435
import java.util.HashMap;
3536
import java.util.List;
3637
import java.util.Map;
38+
import java.util.Set;
3739
import java.util.function.Supplier;
3840
import java.util.stream.Collectors;
3941

@@ -42,7 +44,7 @@ public class Grid {
4244
private static final Json JSON = new Json();
4345
private final URI uri;
4446
private final Supplier<DistributorStatus> distributorStatus;
45-
private final List<Object> queueInfoList;
47+
private final List<Set<Capabilities>> queueInfoList;
4648
private final String version;
4749

4850
public Grid(Distributor distributor, NewSessionQueuer newSessionQueuer, URI uri,
@@ -128,7 +130,9 @@ public int getSessionQueueSize() {
128130
}
129131

130132
public List<String> getSessionQueueRequests() {
133+
// TODO: The Grid UI expects there to be a single capability per new session request, which is not correct
131134
return queueInfoList.stream()
135+
.map(set -> set.isEmpty() ? new ImmutableCapabilities() : set.iterator().next())
132136
.map(JSON::toJson)
133137
.collect(Collectors.toList());
134138
}

java/server/src/org/openqa/selenium/grid/sessionqueue/NewSessionQueue.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

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

20+
import org.openqa.selenium.Capabilities;
2021
import org.openqa.selenium.grid.data.RequestId;
2122
import org.openqa.selenium.internal.Require;
2223
import org.openqa.selenium.remote.tracing.Tracer;
@@ -26,6 +27,7 @@
2627
import java.time.Instant;
2728
import java.util.List;
2829
import java.util.Optional;
30+
import java.util.Set;
2931

3032
public abstract class NewSessionQueue implements HasReadyState {
3133

@@ -49,7 +51,7 @@ protected NewSessionQueue(Tracer tracer, Duration retryInterval, Duration reques
4951

5052
public abstract int getQueueSize();
5153

52-
public abstract List<Object> getQueuedRequests();
54+
public abstract List<Set<Capabilities>> getQueuedRequests();
5355

5456
public boolean hasRequestTimedOut(SessionRequest request) {
5557
Instant enque = request.getEnqueued();

java/server/src/org/openqa/selenium/grid/sessionqueue/NewSessionQueuer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

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

20+
import org.openqa.selenium.Capabilities;
2021
import org.openqa.selenium.grid.data.RequestId;
2122
import org.openqa.selenium.grid.security.RequiresSecretFilter;
2223
import org.openqa.selenium.grid.security.Secret;
@@ -37,6 +38,7 @@
3738
import java.util.List;
3839
import java.util.Map;
3940
import java.util.Optional;
41+
import java.util.Set;
4042
import java.util.UUID;
4143
import java.util.stream.Collectors;
4244

@@ -98,7 +100,7 @@ private RequestId requestIdFrom(Map<String, String> params) {
98100

99101
public abstract int clearQueue();
100102

101-
public abstract List<Object> getQueueContents();
103+
public abstract List<Set<Capabilities>> getQueueContents();
102104

103105
@Override
104106
public boolean matches(HttpRequest req) {

java/server/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueue.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.openqa.selenium.grid.sessionqueue.local;
1919

20+
import org.openqa.selenium.Capabilities;
2021
import org.openqa.selenium.concurrent.Regularly;
2122
import org.openqa.selenium.events.EventBus;
2223
import org.openqa.selenium.grid.config.Config;
@@ -46,6 +47,7 @@
4647
import java.util.List;
4748
import java.util.Map;
4849
import java.util.Optional;
50+
import java.util.Set;
4951
import java.util.concurrent.ConcurrentLinkedDeque;
5052
import java.util.concurrent.Executors;
5153
import java.util.concurrent.ScheduledExecutorService;
@@ -114,14 +116,12 @@ public int getQueueSize() {
114116
}
115117

116118
@Override
117-
public List<Object> getQueuedRequests() {
119+
public List<Set<Capabilities>> getQueuedRequests() {
118120
Lock readLock = lock.readLock();
119121
readLock.lock();
120122
try {
121123
return sessionRequests.stream()
122-
.map(req -> req.getDesiredCapabilities().iterator())
123-
.filter(Iterator::hasNext)
124-
.map(Iterator::next)
124+
.map(SessionRequest::getDesiredCapabilities)
125125
.collect(Collectors.toList());
126126
} finally {
127127
readLock.unlock();

java/server/src/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueuer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import java.util.Map;
5151
import java.util.Objects;
5252
import java.util.Optional;
53+
import java.util.Set;
5354

5455
import static org.openqa.selenium.remote.http.Contents.reader;
5556
import static org.openqa.selenium.remote.tracing.Tags.EXCEPTION;
@@ -111,7 +112,7 @@ public int clearQueue() {
111112
}
112113

113114
@Override
114-
public List<Object> getQueueContents() {
115+
public List<Set<Capabilities>> getQueueContents() {
115116
return sessionRequests.getQueuedRequests();
116117
}
117118

java/server/src/org/openqa/selenium/grid/sessionqueue/remote/RemoteNewSessionQueuer.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.openqa.selenium.grid.sessionqueue.remote;
1919

20+
import org.openqa.selenium.Capabilities;
2021
import org.openqa.selenium.grid.config.Config;
2122
import org.openqa.selenium.grid.data.RequestId;
2223
import org.openqa.selenium.grid.log.LoggingOptions;
@@ -30,6 +31,7 @@
3031
import org.openqa.selenium.grid.web.Values;
3132
import org.openqa.selenium.internal.Require;
3233
import org.openqa.selenium.json.Json;
34+
import org.openqa.selenium.json.TypeToken;
3335
import org.openqa.selenium.remote.http.Contents;
3436
import org.openqa.selenium.remote.http.Filter;
3537
import org.openqa.selenium.remote.http.HttpClient;
@@ -39,17 +41,20 @@
3941
import org.openqa.selenium.remote.tracing.Tracer;
4042

4143
import java.io.UncheckedIOException;
44+
import java.lang.reflect.Type;
4245
import java.net.MalformedURLException;
4346
import java.net.URI;
4447
import java.util.List;
4548
import java.util.Optional;
49+
import java.util.Set;
4650

4751
import static org.openqa.selenium.remote.http.HttpMethod.DELETE;
4852
import static org.openqa.selenium.remote.http.HttpMethod.GET;
4953
import static org.openqa.selenium.remote.http.HttpMethod.POST;
5054

5155
public class RemoteNewSessionQueuer extends NewSessionQueuer {
5256

57+
private static final Type QUEUE_CONTENTS_TYPE = new TypeToken<List<Set<Capabilities>>>() {}.getType();
5358
private static final Json JSON = new Json();
5459
private final HttpClient client;
5560
private final Filter addSecret;
@@ -128,11 +133,12 @@ public int clearQueue() {
128133
}
129134

130135
@Override
131-
public List<Object> getQueueContents() {
136+
public List<Set<Capabilities>> getQueueContents() {
132137
HttpRequest upstream = new HttpRequest(GET, "/se/grid/newsessionqueuer/queue");
133138
HttpTracing.inject(tracer, tracer.getCurrentContext(), upstream);
134139
HttpResponse response = client.execute(upstream);
135-
return Values.get(response, List.class);
140+
141+
return Values.get(response, QUEUE_CONTENTS_TYPE);
136142
}
137143

138144
@Override

java/server/test/org/openqa/selenium/grid/sessionqueue/NewSessionQueuerTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,24 +225,24 @@ public void shouldBeClearQueueRemotely() {
225225
public void shouldBeAbleToGetQueueContents() {
226226
sessionQueue.offerLast(sessionRequest);
227227

228-
List<Object> response = local.getQueueContents();
228+
List<Set<Capabilities>> response = local.getQueueContents();
229229
assertThat(response).isNotNull();
230230

231231
assertEquals(1, response.size());
232232

233-
assertEquals(caps, response.get(0));
233+
assertEquals(Set.of(caps), response.get(0));
234234
}
235235

236236
@Test
237237
public void shouldBeAbleToGetQueueContentsRemotely() {
238238
sessionQueue.offerLast(sessionRequest);
239239

240-
List<Object> response = sessionQueue.getQueuedRequests();
240+
List<Set<Capabilities>> response = sessionQueue.getQueuedRequests();
241241
assertThat(response).isNotNull();
242242

243243
assertEquals(1, response.size());
244244

245-
assertEquals(caps, response.iterator().next());
245+
assertEquals(Set.of(caps), response.iterator().next());
246246
}
247247

248248
@Test

java/server/test/org/openqa/selenium/grid/sessionqueue/local/LocalNewSessionQueueTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,13 +192,13 @@ public void shouldBeAbleToGetQueueContents() {
192192
boolean addFirefoxRequest = sessionQueue.offerLast(firefoxRequest);
193193
assertTrue(addFirefoxRequest);
194194

195-
List<Object> response = sessionQueue.getQueuedRequests();
195+
List<Set<Capabilities>> response = sessionQueue.getQueuedRequests();
196196
assertThat(response).isNotNull();
197197

198198
assertEquals(2, response.size());
199199

200-
assertEquals(chromeCaps, response.get(0));
201-
assertEquals(firefoxCaps, response.get(1));
200+
assertEquals(Set.of(chromeCaps), response.get(0));
201+
assertEquals(Set.of(firefoxCaps), response.get(1));
202202
}
203203

204204
@Test(timeout = 15000)

0 commit comments

Comments
 (0)