Skip to content

Commit aadc203

Browse files
authored
[grid] Add info and warn log while adding specific drivers to node (#9129)
1 parent 7db80da commit aadc203

File tree

2 files changed

+39
-12
lines changed

2 files changed

+39
-12
lines changed

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

+31-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.Optional;
4949
import java.util.ServiceLoader;
5050
import java.util.function.Function;
51+
import java.util.logging.Level;
5152
import java.util.logging.Logger;
5253
import java.util.stream.Collectors;
5354
import java.util.stream.IntStream;
@@ -123,9 +124,9 @@ public Map<Capabilities, Collection<SessionFactory>> getSessionFactories(
123124
ImmutableMultimap.builder();
124125

125126
addDriverFactoriesFromConfig(sessionFactories);
127+
addDriverConfigs(factoryFactory, sessionFactories);
126128
addSpecificDrivers(allDrivers, sessionFactories);
127129
addDetectedDrivers(allDrivers, sessionFactories);
128-
addDriverConfigs(factoryFactory, sessionFactories);
129130

130131
return sessionFactories.build().asMap();
131132
}
@@ -277,13 +278,22 @@ private void addDetectedDrivers(
277278
.forEach(
278279
entry ->
279280
sessionFactories.putAll(entry.getKey().getCanonicalCapabilities(), entry.getValue()));
281+
282+
if (sessionFactories.build().size() == 0) {
283+
String logMessage = "No drivers have been configured or have been found on PATH";
284+
LOG.warning(logMessage);
285+
throw new ConfigException(logMessage);
286+
}
280287
}
281288

282289
private void addSpecificDrivers(
283290
Map<WebDriverInfo, Collection<SessionFactory>> allDrivers,
284291
ImmutableMultimap.Builder<Capabilities, SessionFactory> sessionFactories) {
285-
if (!config.getBool(NODE_SECTION, "detect-drivers").orElse(DEFAULT_DETECT_DRIVERS) &&
286-
config.getAll(NODE_SECTION, "driver-implementation").isPresent()) {
292+
if (!config.getAll(NODE_SECTION, "driver-implementation").isPresent()) {
293+
return;
294+
}
295+
296+
if (!config.getBool(NODE_SECTION, "detect-drivers").orElse(DEFAULT_DETECT_DRIVERS)) {
287297
String logMessage = "Specific drivers cannot be added if 'detect-drivers' is set to false";
288298
LOG.warning(logMessage);
289299
throw new ConfigException(logMessage);
@@ -292,9 +302,25 @@ private void addSpecificDrivers(
292302
List<String> drivers = config.getAll(NODE_SECTION, "driver-implementation")
293303
.orElse(new ArrayList<>())
294304
.stream()
305+
.distinct()
295306
.map(String::toLowerCase)
307+
.peek(driver -> {
308+
boolean noneMatch = allDrivers
309+
.entrySet()
310+
.stream()
311+
.noneMatch(entry -> entry.getKey().getDisplayName().equalsIgnoreCase(driver));
312+
if (noneMatch) {
313+
LOG.log(Level.WARNING, "Could not find {0} driver on PATH.", driver);
314+
}
315+
})
296316
.collect(Collectors.toList());
297317

318+
allDrivers.entrySet().stream()
319+
.filter(entry -> drivers.contains(entry.getKey().getDisplayName().toLowerCase()))
320+
.findFirst()
321+
.orElseThrow(() ->
322+
new ConfigException("No drivers were found for %s", drivers.toString()));
323+
298324
allDrivers.entrySet().stream()
299325
.filter(entry -> drivers.contains(entry.getKey().getDisplayName().toLowerCase()))
300326
.sorted(Comparator.comparing(entry -> entry.getKey().getDisplayName().toLowerCase()))
@@ -318,6 +344,8 @@ private Map<WebDriverInfo, Collection<SessionFactory>> discoverDrivers(
318344
.sorted(Comparator.comparing(info -> info.getDisplayName().toLowerCase()))
319345
.collect(Collectors.toList());
320346

347+
LOG.log(Level.INFO,"Discovered {0} driver(s)", infos.size());
348+
321349
// Same
322350
List<DriverService.Builder<?, ?>> builders = new ArrayList<>();
323351
ServiceLoader.load(DriverService.Builder.class).forEach(builders::add);

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

+8-9
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public void canConfigureNodeWithDriverDetection() {
6666
List<Capabilities> reported = new ArrayList<>();
6767
new NodeOptions(config).getSessionFactories(caps -> {
6868
reported.add(caps);
69-
return Collections.emptySet();
69+
return Collections.singleton(HelperFactory.create(config, caps));
7070
});
7171

7272
ChromeDriverInfo chromeDriverInfo = new ChromeDriverInfo();
@@ -90,7 +90,7 @@ public void shouldDetectCorrectDriversOnWindows() {
9090
List<Capabilities> reported = new ArrayList<>();
9191
new NodeOptions(config).getSessionFactories(caps -> {
9292
reported.add(caps);
93-
return Collections.emptySet();
93+
return Collections.singleton(HelperFactory.create(config, caps));
9494
});
9595

9696
assertThat(reported).is(supporting("chrome"));
@@ -112,7 +112,7 @@ public void shouldDetectCorrectDriversOnMac() {
112112
List<Capabilities> reported = new ArrayList<>();
113113
new NodeOptions(config).getSessionFactories(caps -> {
114114
reported.add(caps);
115-
return Collections.emptySet();
115+
return Collections.singleton(HelperFactory.create(config, caps));
116116
});
117117

118118
// There may be more drivers available, but we know that these are meant to be here.
@@ -126,7 +126,7 @@ public void canConfigureNodeWithoutDriverDetection() {
126126
List<Capabilities> reported = new ArrayList<>();
127127
new NodeOptions(config).getSessionFactories(caps -> {
128128
reported.add(caps);
129-
return Collections.emptySet();
129+
return Collections.singleton(HelperFactory.create(config, caps));
130130
});
131131

132132
assertThat(reported).isEmpty();
@@ -144,7 +144,7 @@ public void shouldThrowConfigExceptionIfDetectDriversIsFalseAndSpecificDriverIsA
144144
try {
145145
new NodeOptions(config).getSessionFactories(caps -> {
146146
reported.add(caps);
147-
return Collections.emptySet();
147+
return Collections.singleton(HelperFactory.create(config, caps));
148148
});
149149
fail("Should have not executed 'getSessionFactories' successfully");
150150
} catch (ConfigException e) {
@@ -161,7 +161,7 @@ public void detectDriversByDefault() {
161161
List<Capabilities> reported = new ArrayList<>();
162162
new NodeOptions(config).getSessionFactories(caps -> {
163163
reported.add(caps);
164-
return Collections.emptySet();
164+
return Collections.singleton(HelperFactory.create(config, caps));
165165
});
166166

167167
assertThat(reported).isNotEmpty();
@@ -221,7 +221,7 @@ public void driversCanBeConfigured() {
221221
List<Capabilities> reported = new ArrayList<>();
222222
new NodeOptions(config).getSessionFactories(capabilities -> {
223223
reported.add(capabilities);
224-
return Collections.emptySet();
224+
return Collections.singleton(HelperFactory.create(config, capabilities));
225225
});
226226

227227
assertThat(reported).is(supporting("chrome"));
@@ -269,7 +269,7 @@ public void driversConfigNeedsStereotypeField() {
269269
try {
270270
new NodeOptions(config).getSessionFactories(caps -> {
271271
reported.add(caps);
272-
return Collections.emptySet();
272+
return Collections.singleton(HelperFactory.create(config, caps));
273273
});
274274
fail("Should have not executed 'getSessionFactories' successfully because driver config " +
275275
"needs the stereotype field");
@@ -288,7 +288,6 @@ private Condition<? super List<? extends Capabilities>> supporting(String name)
288288
}
289289

290290
public static class HelperFactory {
291-
292291
public static SessionFactory create(Config config, Capabilities caps) {
293292
return new SessionFactory() {
294293
@Override

0 commit comments

Comments
 (0)