Skip to content

Commit 928833e

Browse files
authored
[grid] Dynamic Grid is able to trigger video record in browser node (#15047)
Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent e4b1e48 commit 928833e

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

java/src/org/openqa/selenium/grid/node/docker/DockerAssetsPath.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public DockerAssetsPath(String hostPath, String containerPath) {
3030
this.containerPath = containerPath;
3131
}
3232

33+
public String getHostPath() {
34+
return this.hostPath;
35+
}
36+
3337
public String getHostPath(SessionId id) {
3438
return this.hostPath + File.separator + id;
3539
}

java/src/org/openqa/selenium/grid/node/docker/DockerOptions.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class DockerOptions {
6161
static final String DOCKER_SECTION = "docker";
6262
static final String DEFAULT_ASSETS_PATH = "/opt/selenium/assets";
6363
static final String DEFAULT_DOCKER_URL = "unix:/var/run/docker.sock";
64-
static final String DEFAULT_VIDEO_IMAGE = "selenium/video:latest";
64+
static final String DEFAULT_VIDEO_IMAGE = "false";
6565
static final int DEFAULT_MAX_SESSIONS = Runtime.getRuntime().availableProcessors();
6666
private static final String DEFAULT_DOCKER_NETWORK = "bridge";
6767
private static final Logger LOG = Logger.getLogger(DockerOptions.class.getName());
@@ -159,7 +159,9 @@ public Map<Capabilities, Collection<SessionFactory>> getDockerSessionFactories(
159159

160160
loadImages(docker, kinds.keySet().toArray(new String[0]));
161161
Image videoImage = getVideoImage(docker);
162-
loadImages(docker, videoImage.getName());
162+
if (videoImage != null) {
163+
loadImages(docker, videoImage.getName());
164+
}
163165

164166
// Hard coding the config section value "node" to avoid an extra dependency
165167
int maxContainerCount =
@@ -224,6 +226,9 @@ protected List<Device> getDevicesMapping() {
224226

225227
private Image getVideoImage(Docker docker) {
226228
String videoImage = config.get(DOCKER_SECTION, "video-image").orElse(DEFAULT_VIDEO_IMAGE);
229+
if (videoImage.equalsIgnoreCase("false")) {
230+
return null;
231+
}
227232
return docker.getImage(videoImage);
228233
}
229234

java/src/org/openqa/selenium/grid/node/docker/DockerSessionFactory.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,15 @@ private Capabilities addForwardCdpEndpoint(
286286
}
287287

288288
private Container createBrowserContainer(int port, Capabilities sessionCapabilities) {
289-
Map<String, String> browserContainerEnvVars = getBrowserContainerEnvVars(sessionCapabilities);
289+
Map<String, String> browserContainerEnvVars = new HashMap<>();
290+
// Enable env var to trigger video recording if session capabilities request and external video
291+
// container is disabled
292+
if (videoImage == null && recordVideoForSession(sessionCapabilities)) {
293+
browserContainerEnvVars.put("SE_RECORD_VIDEO", "true");
294+
browserContainerEnvVars.put("SE_VIDEO_FILE_NAME", "auto");
295+
browserContainerEnvVars.put("SE_VIDEO_RECORD_STANDALONE", "true");
296+
}
297+
browserContainerEnvVars.putAll(getBrowserContainerEnvVars(sessionCapabilities));
290298
long browserContainerShmMemorySize = 2147483648L; // 2GB
291299
ContainerConfig containerConfig =
292300
image(browserImage)
@@ -295,6 +303,10 @@ private Container createBrowserContainer(int port, Capabilities sessionCapabilit
295303
.network(networkName)
296304
.devices(devices)
297305
.applyHostConfig(hostConfig, hostConfigKeys);
306+
Optional<DockerAssetsPath> path = ofNullable(this.assetsPath);
307+
if (path.isPresent() && videoImage == null && recordVideoForSession(sessionCapabilities)) {
308+
containerConfig.bind(Collections.singletonMap(this.assetsPath.getHostPath(), "/videos"));
309+
}
298310
if (!runningInDocker) {
299311
containerConfig = containerConfig.map(Port.tcp(4444), Port.tcp(port));
300312
}
@@ -335,7 +347,7 @@ private void setCapsToEnvVars(
335347

336348
private Container startVideoContainer(
337349
Capabilities sessionCapabilities, String browserContainerIp, String hostPath) {
338-
if (!recordVideoForSession(sessionCapabilities)) {
350+
if (videoImage == null || !recordVideoForSession(sessionCapabilities)) {
339351
return null;
340352
}
341353
int videoPort = 9000;

0 commit comments

Comments
 (0)