Skip to content

Commit bfd0da7

Browse files
committed
[grid] Changing session factory method to use caps instead of WebDriverInfo
1 parent bf2fc56 commit bfd0da7

File tree

3 files changed

+35
-37
lines changed

3 files changed

+35
-37
lines changed

java/server/src/org/openqa/selenium/grid/node/config/NodeOptions.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public Node getNode() {
7979

8080
public Map<Capabilities, Collection<SessionFactory>> getSessionFactories(
8181
/* Danger! Java stereotype ahead! */
82-
Function<WebDriverInfo, Collection<SessionFactory>> factoryFactory) {
82+
Function<Capabilities, Collection<SessionFactory>> factoryFactory) {
8383

8484
int maxSessions = getMaxSessions();
8585

@@ -195,8 +195,7 @@ private void addSpecificDrivers(
195195
}
196196

197197
private Map<WebDriverInfo, Collection<SessionFactory>> discoverDrivers(
198-
int maxSessions,
199-
Function<WebDriverInfo, Collection<SessionFactory>> factoryFactory) {
198+
int maxSessions, Function<Capabilities, Collection<SessionFactory>> factoryFactory) {
200199

201200
if (!config.getBool(NODE_SECTION, "detect-drivers").orElse(true)) {
202201
return ImmutableMap.of();
@@ -220,7 +219,7 @@ private Map<WebDriverInfo, Collection<SessionFactory>> discoverDrivers(
220219
.filter(builder -> builder.score(caps) > 0)
221220
.forEach(builder -> {
222221
for (int i = 0; i < Math.min(info.getMaximumSimultaneousSessions(), maxSessions); i++) {
223-
toReturn.putAll(info, factoryFactory.apply(info));
222+
toReturn.putAll(info, factoryFactory.apply(caps));
224223
}
225224
});
226225
});

java/server/src/org/openqa/selenium/grid/node/local/LocalNodeFactory.java

+8-10
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.common.collect.ImmutableList;
2121
import org.openqa.selenium.Capabilities;
22-
import org.openqa.selenium.WebDriverInfo;
2322
import org.openqa.selenium.grid.config.Config;
2423
import org.openqa.selenium.grid.docker.DockerOptions;
2524
import org.openqa.selenium.grid.log.LoggingOptions;
@@ -63,7 +62,8 @@ public static Node create(Config config) {
6362
List<DriverService.Builder<?, ?>> builders = new ArrayList<>();
6463
ServiceLoader.load(DriverService.Builder.class).forEach(builders::add);
6564

66-
nodeOptions.getSessionFactories(info -> createSessionFactory(tracer, clientFactory, builders, info))
65+
nodeOptions
66+
.getSessionFactories(caps -> createSessionFactory(tracer, clientFactory, builders, caps))
6767
.forEach((caps, factories) -> factories.forEach(factory -> builder.add(caps, factory)));
6868

6969
if (config.getAll("docker", "configs").isPresent()) {
@@ -78,21 +78,19 @@ private static Collection<SessionFactory> createSessionFactory(
7878
Tracer tracer,
7979
HttpClient.Factory clientFactory,
8080
List<DriverService.Builder<?, ?>> builders,
81-
WebDriverInfo info) {
81+
Capabilities capabilities) {
8282
ImmutableList.Builder<SessionFactory> toReturn = ImmutableList.builder();
8383

84-
Capabilities caps = info.getCanonicalCapabilities();
85-
8684
builders.stream()
87-
.filter(builder -> builder.score(caps) > 0)
85+
.filter(builder -> builder.score(capabilities) > 0)
8886
.forEach(builder -> {
89-
DriverService.Builder<?, ?> freePortBuilder = builder.usingAnyFreePort();
87+
DriverService.Builder<?, ?> driverServiceBuilder = builder.usingAnyFreePort();
9088
toReturn.add(new DriverServiceSessionFactory(
9189
tracer,
9290
clientFactory,
93-
info.getCanonicalCapabilities(),
94-
c -> freePortBuilder.score(c) > 0,
95-
freePortBuilder));
91+
capabilities,
92+
c -> driverServiceBuilder.score(c) > 0,
93+
driverServiceBuilder));
9694
});
9795

9896
return toReturn.build();

java/server/test/org/openqa/selenium/grid/node/config/NodeOptionsTest.java

+24-23
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.openqa.selenium.Capabilities;
2323
import org.openqa.selenium.ImmutableCapabilities;
2424
import org.openqa.selenium.Platform;
25-
import org.openqa.selenium.WebDriverInfo;
2625
import org.openqa.selenium.chrome.ChromeDriverInfo;
2726
import org.openqa.selenium.grid.config.Config;
2827
import org.openqa.selenium.grid.config.ConfigException;
@@ -62,16 +61,18 @@ public void canConfigureNodeWithDriverDetection() {
6261

6362
Config config = new MapConfig(singletonMap("node", singletonMap("detect-drivers", "true")));
6463

65-
List<WebDriverInfo> reported = new ArrayList<>();
66-
new NodeOptions(config).getSessionFactories(info -> {
67-
reported.add(info);
64+
List<Capabilities> reported = new ArrayList<>();
65+
new NodeOptions(config).getSessionFactories(caps -> {
66+
reported.add(caps);
6867
return Collections.emptySet();
6968
});
7069

71-
String expected = new ChromeDriverInfo().getDisplayName();
70+
ChromeDriverInfo chromeDriverInfo = new ChromeDriverInfo();
71+
String expected = chromeDriverInfo.getDisplayName();
7272

7373
reported.stream()
74-
.filter(info -> expected.equals(info.getDisplayName()))
74+
.filter(chromeDriverInfo::isSupporting)
75+
.filter(caps -> expected.equalsIgnoreCase(caps.getBrowserName()))
7576
.findFirst()
7677
.orElseThrow(() -> new AssertionError("Unable to find Chrome info"));
7778
}
@@ -84,9 +85,9 @@ public void shouldDetectCorrectDriversOnWindows() {
8485

8586
Config config = new MapConfig(singletonMap("node", singletonMap("detect-drivers", "true")));
8687

87-
List<WebDriverInfo> reported = new ArrayList<>();
88-
new NodeOptions(config).getSessionFactories(info -> {
89-
reported.add(info);
88+
List<Capabilities> reported = new ArrayList<>();
89+
new NodeOptions(config).getSessionFactories(caps -> {
90+
reported.add(caps);
9091
return Collections.emptySet();
9192
});
9293

@@ -106,9 +107,9 @@ public void shouldDetectCorrectDriversOnMac() {
106107

107108
Config config = new MapConfig(singletonMap("node", singletonMap("detect-drivers", "true")));
108109

109-
List<WebDriverInfo> reported = new ArrayList<>();
110-
new NodeOptions(config).getSessionFactories(info -> {
111-
reported.add(info);
110+
List<Capabilities> reported = new ArrayList<>();
111+
new NodeOptions(config).getSessionFactories(caps -> {
112+
reported.add(caps);
112113
return Collections.emptySet();
113114
});
114115

@@ -122,9 +123,9 @@ public void shouldDetectCorrectDriversOnMac() {
122123
@Test
123124
public void canConfigureNodeWithoutDriverDetection() {
124125
Config config = new MapConfig(singletonMap("node", singletonMap("detect-drivers", "false")));
125-
List<WebDriverInfo> reported = new ArrayList<>();
126-
new NodeOptions(config).getSessionFactories(info -> {
127-
reported.add(info);
126+
List<Capabilities> reported = new ArrayList<>();
127+
new NodeOptions(config).getSessionFactories(caps -> {
128+
reported.add(caps);
128129
return Collections.emptySet();
129130
});
130131

@@ -139,10 +140,10 @@ public void shouldThrowConfigExceptionIfDetectDriversIsFalseAndSpecificDriverIsA
139140
"detect-drivers", "false",
140141
"drivers", "[chrome]"
141142
)));
142-
List<WebDriverInfo> reported = new ArrayList<>();
143+
List<Capabilities> reported = new ArrayList<>();
143144
try {
144-
new NodeOptions(config).getSessionFactories(info -> {
145-
reported.add(info);
145+
new NodeOptions(config).getSessionFactories(caps -> {
146+
reported.add(caps);
146147
return Collections.emptySet();
147148
});
148149
fail("Should have not executed 'getSessionFactories' successfully");
@@ -157,9 +158,9 @@ public void shouldThrowConfigExceptionIfDetectDriversIsFalseAndSpecificDriverIsA
157158
public void detectDriversByDefault() {
158159
Config config = new MapConfig(emptyMap());
159160

160-
List<WebDriverInfo> reported = new ArrayList<>();
161-
new NodeOptions(config).getSessionFactories(info -> {
162-
reported.add(info);
161+
List<Capabilities> reported = new ArrayList<>();
162+
new NodeOptions(config).getSessionFactories(caps -> {
163+
reported.add(caps);
163164
return Collections.emptySet();
164165
});
165166

@@ -191,9 +192,9 @@ public void canBeConfiguredToUseHelperClassesToCreateSessionFactories() {
191192
assertThat(sessionFactories.iterator().next()).isInstanceOf(SessionFactory.class);
192193
}
193194

194-
private Condition<? super List<? extends WebDriverInfo>> supporting(String name) {
195+
private Condition<? super List<? extends Capabilities>> supporting(String name) {
195196
return new Condition<>(
196-
infos -> infos.stream().anyMatch(info -> name.equals(info.getCanonicalCapabilities().getBrowserName())),
197+
caps -> caps.stream().anyMatch(cap -> name.equals(cap.getBrowserName())),
197198
"supporting %s",
198199
name);
199200
}

0 commit comments

Comments
 (0)