Skip to content

Commit f2eec92

Browse files
committed
1) Fixing platform verification logic to match platform family only
2) Implementing a CLI option that disables platform verification
1 parent af370f5 commit f2eec92

File tree

3 files changed

+108
-5
lines changed

3 files changed

+108
-5
lines changed

java/server/src/org/openqa/grid/common/RegistrationRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ public static RegistrationRequest build(GridNodeConfiguration configuration, Str
234234
pendingRequest.configuration.fixUpHost();
235235
// make sure the capabilities are updated with required fields
236236
pendingRequest.configuration.fixUpCapabilities();
237-
pendingRequest.configuration.dropCapabilitiesThatDoenNotMatchCurrentPlatform();
237+
pendingRequest.configuration.dropCapabilitiesThatDoesNotMatchCurrentPlatform();
238238

239239
return pendingRequest;
240240
}

java/server/src/org/openqa/grid/internal/utils/configuration/GridNodeConfiguration.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,17 @@ private static class HostPort {
310310
)
311311
public Integer unregisterIfStillDownAfter = DEFAULT_UNREGISTER_DELAY;
312312

313+
/**
314+
* Whether or not to drop capabilities that does not belong to the current platform family
315+
*/
316+
@Expose
317+
@Parameter(
318+
names = "-enablePlatformVerification",
319+
arity = 1,
320+
description = "<Boolean>: Whether or not to drop capabilities that does not belong to the current platform family. Defaults to true."
321+
)
322+
public boolean enablePlatformVerification = true;
323+
313324
/**
314325
* Creates a new configuration using the default values.
315326
*/
@@ -532,22 +543,33 @@ public void fixUpCapabilities() {
532543
capabilities = capabilities.stream()
533544
.peek(cap -> cap.setCapability(
534545
CapabilityType.PLATFORM,
535-
Optional.ofNullable(cap.getCapability(CapabilityType.PLATFORM_NAME)).orElse(current)))
546+
Optional.ofNullable(cap.getCapability(CapabilityType.PLATFORM_NAME)).orElse(
547+
Optional.ofNullable(cap.getCapability(CapabilityType.PLATFORM)).orElse(current))))
548+
.peek(cap -> cap.setCapability(
549+
CapabilityType.PLATFORM_NAME,
550+
Optional.ofNullable(cap.getCapability(CapabilityType.PLATFORM_NAME)).orElse(
551+
Optional.ofNullable(cap.getCapability(CapabilityType.PLATFORM)).orElse(current))))
536552
.peek(cap -> cap.setCapability(RegistrationRequest.SELENIUM_PROTOCOL,
537553
Optional.ofNullable(cap.getCapability(RegistrationRequest.SELENIUM_PROTOCOL))
538554
.orElse(SeleniumProtocol.WebDriver.toString())))
539555
.peek(cap -> cap.setCapability(CONFIG_UUID_CAPABILITY, UUID.randomUUID().toString()))
540556
.collect(Collectors.toList());
541557
}
542558

543-
public void dropCapabilitiesThatDoenNotMatchCurrentPlatform() {
559+
public void dropCapabilitiesThatDoesNotMatchCurrentPlatform() {
560+
if (!enablePlatformVerification) {
561+
return;
562+
}
563+
544564
if (capabilities == null) {
545565
return; // assumes the caller set it/wants it this way
546566
}
547567

548568
Platform current = Platform.getCurrent();
569+
Platform currentFamily = Optional.ofNullable(current.family()).orElse(current);
549570
capabilities = capabilities.stream()
550-
.filter(cap -> current.is(cap.getPlatform()))
571+
.filter(cap -> cap.getPlatform() != null
572+
&& (cap.getPlatform() == Platform.ANY || cap.getPlatform().is(currentFamily)))
551573
.collect(Collectors.toList());
552574
}
553575

java/server/test/org/openqa/grid/common/RegistrationRequestTest.java

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import com.beust.jcommander.JCommander;
2828

29+
import org.junit.Assume;
2930
import org.junit.Test;
3031
import org.openqa.grid.common.exception.GridConfigurationException;
3132
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration;
@@ -268,7 +269,7 @@ public void testConstructorDoesNotPruneCapabilitiesWithUnknownPlatform() {
268269
}
269270

270271
@Test
271-
public void testBuilderPrunesCapabilitiesWithUnknownPlatform() {
272+
public void testBuilderPrunesCapabilitiesWithUnknownPlatformName() {
272273
GridNodeConfiguration config = new GridNodeConfiguration();
273274
MutableCapabilities capabilities = new MutableCapabilities();
274275
capabilities.setCapability("browserName", "firefox");
@@ -278,6 +279,86 @@ public void testBuilderPrunesCapabilitiesWithUnknownPlatform() {
278279
assertEquals(req.getConfiguration().capabilities.size(), 0);
279280
}
280281

282+
@Test
283+
public void testBuilderPrunesCapabilitiesWithUnknownPlatform() {
284+
GridNodeConfiguration config = new GridNodeConfiguration();
285+
MutableCapabilities capabilities = new MutableCapabilities();
286+
capabilities.setCapability("browserName", "firefox");
287+
capabilities.setCapability("platform", "cheese");
288+
config.capabilities = Arrays.asList(capabilities);
289+
RegistrationRequest req = RegistrationRequest.build(config);
290+
assertEquals(req.getConfiguration().capabilities.size(), 0);
291+
}
292+
293+
@Test
294+
public void testBuilderPrunesCapabilitiesWithPlatformThatDoesNotMatchCurrent() {
295+
Platform current = Platform.getCurrent().family();
296+
Platform platform = Arrays.stream(Platform.values())
297+
.filter(p -> ! p.is(current)).findFirst().get();
298+
GridNodeConfiguration config = new GridNodeConfiguration();
299+
MutableCapabilities capabilities = new MutableCapabilities();
300+
capabilities.setCapability("browserName", "firefox");
301+
capabilities.setCapability("platform", platform);
302+
config.capabilities = Arrays.asList(capabilities);
303+
RegistrationRequest req = RegistrationRequest.build(config);
304+
assertEquals(req.getConfiguration().capabilities.size(), 0);
305+
}
306+
307+
@Test
308+
public void testBuilderDoesNotPruneCapabilitiesWithPlatformThatIsEqualToCurrentFamily() {
309+
Platform platform = Platform.getCurrent().family();
310+
GridNodeConfiguration config = new GridNodeConfiguration();
311+
MutableCapabilities capabilities = new MutableCapabilities();
312+
capabilities.setCapability("browserName", "firefox");
313+
capabilities.setCapability("platform", platform);
314+
config.capabilities = Arrays.asList(capabilities);
315+
RegistrationRequest req = RegistrationRequest.build(config);
316+
assertEquals(req.getConfiguration().capabilities.size(), 1);
317+
}
318+
319+
@Test
320+
public void testBuilderDoesNotPruneCapabilitiesWithPlatformThatBelongsToCurrentFamily() {
321+
Platform current = Platform.getCurrent().family();
322+
Platform platform = Arrays.stream(Platform.values())
323+
.filter(p -> p.is(current) && p != current).findFirst().orElse(null);
324+
Assume.assumeTrue(platform != null);
325+
GridNodeConfiguration config = new GridNodeConfiguration();
326+
MutableCapabilities capabilities = new MutableCapabilities();
327+
capabilities.setCapability("browserName", "firefox");
328+
capabilities.setCapability("platform", platform);
329+
config.capabilities = Arrays.asList(capabilities);
330+
RegistrationRequest req = RegistrationRequest.build(config);
331+
assertEquals(req.getConfiguration().capabilities.size(), 1);
332+
}
333+
334+
@Test
335+
public void testBuilderFixesUpPlatform() {
336+
Platform platform = Platform.getCurrent();
337+
GridNodeConfiguration config = new GridNodeConfiguration();
338+
MutableCapabilities capabilities = new MutableCapabilities();
339+
capabilities.setCapability("browserName", "firefox");
340+
capabilities.setCapability("platformName", platform);
341+
config.capabilities = Arrays.asList(capabilities);
342+
RegistrationRequest req = RegistrationRequest.build(config);
343+
assertEquals(req.getConfiguration().capabilities.size(), 1);
344+
assertEquals(req.getConfiguration().capabilities.get(0).getCapability("platform"), platform);
345+
assertEquals(req.getConfiguration().capabilities.get(0).getCapability("platformName"), platform);
346+
}
347+
348+
@Test
349+
public void testBuilderFixesUpPlatformName() {
350+
Platform platform = Platform.getCurrent();
351+
GridNodeConfiguration config = new GridNodeConfiguration();
352+
MutableCapabilities capabilities = new MutableCapabilities();
353+
capabilities.setCapability("browserName", "firefox");
354+
capabilities.setCapability("platform", platform);
355+
config.capabilities = Arrays.asList(capabilities);
356+
RegistrationRequest req = RegistrationRequest.build(config);
357+
assertEquals(req.getConfiguration().capabilities.size(), 1);
358+
assertEquals(req.getConfiguration().capabilities.get(0).getCapability("platform"), platform);
359+
assertEquals(req.getConfiguration().capabilities.get(0).getCapability("platformName"), platform);
360+
}
361+
281362
private void assertConstruction(RegistrationRequest req) {
282363
assertNotNull(req);
283364
assertNotNull(req.getConfiguration());

0 commit comments

Comments
 (0)