Skip to content

Commit f333a04

Browse files
committed
[grid] Adding a configuration flag to set a noVNC port.
#9927
1 parent 7663dfd commit f333a04

5 files changed

Lines changed: 27 additions & 6 deletions

File tree

java/src/org/openqa/selenium/grid/node/config/DriverServiceSessionFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,12 @@ public DevToolsInfo(URI cdpEndpoint, String version) {
228228

229229
private Capabilities readVncEndpoint(Capabilities requestedCaps, Capabilities returnedCaps) {
230230
String seVncEnabledCap = "se:vncEnabled";
231+
String seNoVncPortCap = "se:noVncPort";
231232
String seVncEnabled = String.valueOf(requestedCaps.getCapability(seVncEnabledCap));
232233
boolean vncLocalAddressSet = requestedCaps.getCapabilityNames().contains("se:vncLocalAddress");
233234
if (Boolean.parseBoolean(seVncEnabled) && !vncLocalAddressSet) {
234-
String vncLocalAddress = String.format("ws://%s:7900", getHost());
235+
String seNoVncPort = String.valueOf(requestedCaps.getCapability(seNoVncPortCap));
236+
String vncLocalAddress = String.format("ws://%s:%s", getHost(), seNoVncPort);
235237
returnedCaps = new PersistentCapabilities(returnedCaps)
236238
.setCapability("se:vncLocalAddress", vncLocalAddress)
237239
.setCapability(seVncEnabledCap, true);

java/src/org/openqa/selenium/grid/node/config/NodeFlags.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_HEARTBEAT_PERIOD;
2323
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_MAX_SESSIONS;
2424
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_NODE_IMPLEMENTATION;
25+
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_NO_VNC_PORT;
2526
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_REGISTER_CYCLE;
2627
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_REGISTER_PERIOD;
2728
import static org.openqa.selenium.grid.node.config.NodeOptions.DEFAULT_SESSION_TIMEOUT;
@@ -175,12 +176,17 @@ public class NodeFlags implements HasRoles {
175176

176177
@Parameter(
177178
names = "--vnc-env-var",
178-
hidden = true,
179179
description = "Environment variable to check in order to determine if a vnc stream is " +
180180
"available or not.")
181181
@ConfigValue(section = NODE_SECTION, name = "vnc-env-var", example = "START_XVFB")
182182
public String vncEnvVar = DEFAULT_VNC_ENV_VAR;
183183

184+
@Parameter(
185+
names = "--no-vnc-port",
186+
description = "If VNC is available, sets the port where the local noVNC stream can be obtained")
187+
@ConfigValue(section = NODE_SECTION, name = "no-vnc-port", example = "7900")
188+
public int noVncPort = DEFAULT_NO_VNC_PORT;
189+
184190
@Parameter(
185191
names = {"--node-implementation"},
186192
description = "Full classname of non-default Node implementation. This is used to manage "

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public class NodeOptions {
7373
static final boolean DEFAULT_DETECT_DRIVERS = true;
7474
static final boolean OVERRIDE_MAX_SESSIONS = false;
7575
static final String DEFAULT_VNC_ENV_VAR = "START_XVFB";
76+
static final int DEFAULT_NO_VNC_PORT = 7900;
7677
static final int DEFAULT_REGISTER_CYCLE = 10;
7778
static final int DEFAULT_REGISTER_PERIOD = 120;
7879
static final String DEFAULT_NODE_IMPLEMENTATION =
@@ -240,6 +241,11 @@ boolean isVncEnabled() {
240241
return vncEnabled.get();
241242
}
242243

244+
@VisibleForTesting
245+
int noVncPort() {
246+
return config.getInt(NODE_SECTION, "no-vnc-port").orElse(DEFAULT_NO_VNC_PORT);
247+
}
248+
243249
private void addDriverFactoriesFromConfig(ImmutableMultimap.Builder<Capabilities,
244250
SessionFactory> sessionFactories) {
245251
config.getAll(NODE_SECTION, "driver-factories").ifPresent(allConfigs -> {
@@ -572,7 +578,8 @@ private Capabilities enhanceStereotype(Capabilities capabilities) {
572578
}
573579
if (isVncEnabled()) {
574580
capabilities = new PersistentCapabilities(capabilities)
575-
.setCapability("se:vncEnabled", true);
581+
.setCapability("se:vncEnabled", true)
582+
.setCapability("se:noVncPort", noVncPort());
576583
}
577584
return capabilities;
578585
}

java/src/org/openqa/selenium/grid/node/config/SessionCapabilitiesMutator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class SessionCapabilitiesMutator implements Function<Capabilities, Capabi
3535
"firefox", "moz:firefoxOptions",
3636
"microsoftedge", "ms:edgeOptions");
3737
private static final String SE_VNC_ENABLED = "se:vncEnabled";
38+
private static final String SE_NO_VNC_PORT = "se:noVncPort";
3839
private final Capabilities slotStereotype;
3940

4041

@@ -46,7 +47,8 @@ public SessionCapabilitiesMutator(Capabilities slotStereotype) {
4647
public Capabilities apply(Capabilities capabilities) {
4748
if (slotStereotype.getCapability(SE_VNC_ENABLED) != null) {
4849
capabilities = new PersistentCapabilities(capabilities)
49-
.setCapability(SE_VNC_ENABLED, slotStereotype.getCapability(SE_VNC_ENABLED));
50+
.setCapability(SE_VNC_ENABLED, slotStereotype.getCapability(SE_VNC_ENABLED))
51+
.setCapability(SE_NO_VNC_PORT, slotStereotype.getCapability(SE_NO_VNC_PORT));
5052
}
5153

5254
if (!Objects.equals(slotStereotype.getBrowserName(), capabilities.getBrowserName())) {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ public void vncEnabledCapabilityIsAddedWhenEnvVarIsTrue() {
155155
});
156156

157157
assertThat(reported)
158-
.filteredOn(capabilities -> capabilities.getCapability("se:vncEnabled") != null)
158+
.filteredOn(capabilities ->
159+
capabilities.getCapability("se:vncEnabled") != null &&
160+
capabilities.getCapability("se:noVncPort") != null)
159161
.hasSize(reported.size());
160162
}
161163

@@ -173,7 +175,9 @@ public void vncEnabledCapabilityIsNotAddedWhenEnvVarIsFalse() {
173175
});
174176

175177
assertThat(reported)
176-
.filteredOn(capabilities -> capabilities.getCapability("se:vncEnabled") == null)
178+
.filteredOn(capabilities ->
179+
capabilities.getCapability("se:vncEnabled") == null &&
180+
capabilities.getCapability("se:noVncPort") == null)
177181
.hasSize(reported.size());
178182
}
179183

0 commit comments

Comments
 (0)