Skip to content

Commit fcfbc6b

Browse files
committed
[grid] Fixing cli args parsing
A bug was introduced where cli args values where being duplicated in some cases.
1 parent bd46c82 commit fcfbc6b

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

java/server/src/org/openqa/selenium/grid/TemplateGridCommand.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public final Executable configure(PrintStream out, PrintStream err, String... ar
9898
.map(ParameterDescription::getLongestName)
9999
.collect(Collectors.toSet());
100100
if (cliArgs.size() > 0) {
101-
allFlags.forEach(flags -> allConfigs.add(new AnnotatedConfig(flags, cliArgs)));
101+
allFlags.forEach(flags -> allConfigs.add(new AnnotatedConfig(flags, cliArgs, true)));
102102
}
103103

104104
// 4. Configuration files (config.toml)
@@ -111,7 +111,7 @@ public final Executable configure(PrintStream out, PrintStream err, String... ar
111111
getFlagObjects().forEach(flagObject -> allConfigs.add(new AnnotatedConfig(flagObject)));
112112

113113
// 7. Default values
114-
allFlags.forEach(flags -> allConfigs.add(new AnnotatedConfig(flags)));
114+
allFlags.forEach(flags -> allConfigs.add(new AnnotatedConfig(flags, cliArgs, false)));
115115

116116
Config config = new MemoizedConfig(new CompoundConfig(allConfigs.toArray(new Config[0])));
117117

java/server/src/org/openqa/selenium/grid/config/AnnotatedConfig.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,10 @@ public class AnnotatedConfig implements Config {
5555
private final Map<String, Map<String, List<String>>> config;
5656

5757
public AnnotatedConfig(Object obj) {
58-
this(obj, Collections.emptySet());
58+
this(obj, Collections.emptySet(), false);
5959
}
6060

61-
public AnnotatedConfig(Object obj, Set<String> cliArgs) {
61+
public AnnotatedConfig(Object obj, Set<String> cliArgs, boolean includeCliArgs) {
6262
Map<String, Map<String, List<String>>> values = new HashMap<>();
6363

6464
Deque<Field> allConfigValues = findConfigFields(obj.getClass());
@@ -80,10 +80,14 @@ public AnnotatedConfig(Object obj, Set<String> cliArgs) {
8080
Parameter cliAnnotation = field.getAnnotation(Parameter.class);
8181
boolean containsCliArg = cliAnnotation != null &&
8282
Arrays.stream(cliAnnotation.names()).anyMatch(cliArgs::contains);
83-
if (cliArgs.size() > 0 && !containsCliArg) {
83+
if (cliArgs.size() > 0 && !containsCliArg && includeCliArgs) {
8484
// Only getting config values for args entered by the user.
8585
continue;
8686
}
87+
if (cliArgs.size() > 0 && containsCliArg && !includeCliArgs) {
88+
// Excluding config values for args entered by the user.
89+
continue;
90+
}
8791
Map<String, List<String>> section = values.computeIfAbsent(
8892
annotation.section(),
8993
str -> new HashMap<>());

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

+10-4
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,19 @@ public Map<Capabilities, Collection<SessionFactory>> getSessionFactories(
124124
Function<Capabilities, Collection<SessionFactory>> factoryFactory) {
125125

126126
LOG.log(Level.INFO, "Detected {0} available processors", DEFAULT_MAX_SESSIONS);
127-
int maxSessions = getMaxSessions();
128-
if (maxSessions > DEFAULT_MAX_SESSIONS) {
127+
boolean overrideMaxSessions = config.getBool(NODE_SECTION, "override-max-sessions")
128+
.orElse(OVERRIDE_MAX_SESSIONS);
129+
if (overrideMaxSessions) {
129130
LOG.log(Level.WARNING,
130131
"Overriding max recommended number of {0} concurrent sessions. "
131132
+ "Session stability and reliability might suffer!",
132133
DEFAULT_MAX_SESSIONS);
133134
LOG.warning("One browser session is recommended per available processor. IE and "
134135
+ "Safari are always limited to 1 session per host.");
135136
LOG.warning("Double check if enabling 'override-max-sessions' is really needed");
137+
}
138+
int maxSessions = getMaxSessions();
139+
if (maxSessions > DEFAULT_MAX_SESSIONS) {
136140
LOG.log(Level.WARNING, "Max sessions set to {0} ", maxSessions);
137141
}
138142

@@ -451,13 +455,15 @@ private int getDriverMaxSessions(WebDriverInfo info, int desiredMaxSessions) {
451455
if (info.getMaximumSimultaneousSessions() == 1) {
452456
return info.getMaximumSimultaneousSessions();
453457
}
454-
if (desiredMaxSessions > info.getMaximumSimultaneousSessions()) {
458+
boolean overrideMaxSessions = config.getBool(NODE_SECTION, "override-max-sessions")
459+
.orElse(OVERRIDE_MAX_SESSIONS);
460+
if (desiredMaxSessions > info.getMaximumSimultaneousSessions() && overrideMaxSessions) {
455461
String logMessage = String.format(
456462
"Overriding max recommended number of %s concurrent sessions for %s, setting it to %s",
457463
info.getMaximumSimultaneousSessions(),
458464
info.getDisplayName(),
459465
desiredMaxSessions);
460-
LOG.log(Level.WARNING, logMessage);
466+
LOG.log(Level.FINE, logMessage);
461467
return desiredMaxSessions;
462468
}
463469
return Math.min(info.getMaximumSimultaneousSessions(), desiredMaxSessions);

java/server/test/org/openqa/selenium/grid/config/AnnotatedConfigTest.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@
1717

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

20-
import static org.junit.Assert.assertEquals;
21-
import static org.junit.Assert.assertFalse;
22-
import static org.junit.Assert.assertTrue;
23-
2420
import com.google.common.collect.ImmutableMap;
2521
import com.google.common.collect.ImmutableSet;
2622

@@ -33,6 +29,10 @@
3329
import java.util.Optional;
3430
import java.util.Set;
3531

32+
import static org.junit.Assert.assertEquals;
33+
import static org.junit.Assert.assertFalse;
34+
import static org.junit.Assert.assertTrue;
35+
3636
public class AnnotatedConfigTest {
3737

3838
@Test
@@ -172,7 +172,8 @@ class TypesToBeFiltered {
172172

173173
Config config = new AnnotatedConfig(
174174
new TypesToBeFiltered(),
175-
ImmutableSet.of("--string", "--bool"));
175+
ImmutableSet.of("--string", "--bool"),
176+
true);
176177
assertEquals(Optional.of(true), config.getBool("types", "boolean"));
177178
assertEquals(Optional.of("A String"), config.get("types", "string"));
178179
assertEquals(Optional.empty(), config.getInt("types", "integer"));

0 commit comments

Comments
 (0)