Skip to content

Commit 676c4cc

Browse files
committed
[grid] Do not match empty capabilities
Fixes #10410
1 parent 7e8c430 commit 676c4cc

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

java/src/org/openqa/selenium/grid/data/DefaultSlotMatcher.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ public class DefaultSlotMatcher implements SlotMatcher, Serializable {
5656
@Override
5757
public boolean matches(Capabilities stereotype, Capabilities capabilities) {
5858

59+
if (capabilities.asMap().isEmpty()) {
60+
return false;
61+
}
62+
5963
if (!initialMatch(stereotype, capabilities)) {
6064
return false;
6165
}
@@ -87,7 +91,7 @@ private Boolean initialMatch(Capabilities stereotype, Capabilities capabilities)
8791
return stereotype.getCapabilityNames().stream()
8892
// Matching of extension capabilities is implementation independent. Skip them
8993
.filter(name -> !name.contains(":"))
90-
// Platform matching is special, we do later
94+
// Platform matching is special, we do it later
9195
.filter(name -> !"platform".equalsIgnoreCase(name) && !"platformName".equalsIgnoreCase(name))
9296
.map(name -> {
9397
if (capabilities.getCapability(name) instanceof String) {

java/src/org/openqa/selenium/grid/data/SessionRequest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,20 @@ public class SessionRequest {
5959

6060
public SessionRequest(RequestId requestId, HttpRequest request, Instant enqueued) {
6161
this.requestId = Require.nonNull("Request ID", requestId);
62-
this.enqueued = Require.nonNull("Enqueud time", enqueued);
62+
this.enqueued = Require.nonNull("Enqueued time", enqueued);
6363
Require.nonNull("Request", request);
6464

6565
try (NewSessionPayload payload = NewSessionPayload.create(Contents.reader(request))) {
66-
desiredCapabilities = payload.stream().collect(Collectors.toSet());
66+
desiredCapabilities = payload.stream()
67+
.filter(capabilities -> !capabilities.asMap().isEmpty())
68+
.collect(Collectors.toSet());
6769
downstreamDialects = payload.getDownstreamDialects();
6870
metadata = payload.getMetadata();
6971
}
7072

7173
Map<String, String> headers = new HashMap<>();
72-
Optional<String> traceparentValue = Optional.ofNullable(request.getHeader("traceparent"));
73-
traceparentValue.ifPresent(value -> headers.put("traceparent", value));
74+
Optional<String> traceParentValue = Optional.ofNullable(request.getHeader("traceparent"));
75+
traceParentValue.ifPresent(value -> headers.put("traceparent", value));
7476
this.traceHeaders = Collections.unmodifiableMap(headers);
7577
}
7678

java/test/org/openqa/selenium/grid/data/DefaultSlotMatcherTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,4 +368,17 @@ public void vendorExtensionPrefixedCapabilitiesAreIgnoredForMatching() {
368368
);
369369
assertThat(slotMatcher.matches(stereotype, capabilities)).isTrue();
370370
}
371+
372+
@Test
373+
public void emptyCapabilitiesDoNotMatch() {
374+
Capabilities stereotype = new ImmutableCapabilities(
375+
CapabilityType.BROWSER_NAME, "firefox",
376+
CapabilityType.BROWSER_VERSION, "98",
377+
CapabilityType.PLATFORM_NAME, Platform.MAC
378+
);
379+
380+
Capabilities capabilities = new ImmutableCapabilities();
381+
assertThat(slotMatcher.matches(stereotype, capabilities)).isFalse();
382+
}
383+
371384
}

0 commit comments

Comments
 (0)