Skip to content

Commit a7102f2

Browse files
committed
[grid] Fixes file upload for Dynamic Grid
Fixes SeleniumHQ/docker-selenium#1324
1 parent 9484cac commit a7102f2

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

java/src/org/openqa/selenium/grid/docker/DockerSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import java.time.Duration;
3131
import java.time.Instant;
3232

33-
class DockerSession extends ProtocolConvertingSession {
33+
public class DockerSession extends ProtocolConvertingSession {
3434

3535
private final Container container;
3636
private final Container videoContainer;

java/src/org/openqa/selenium/grid/node/local/LocalNode.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@
1717

1818
package org.openqa.selenium.grid.node.local;
1919

20+
import static com.google.common.collect.ImmutableSet.toImmutableSet;
21+
import static org.openqa.selenium.grid.data.Availability.DRAINING;
22+
import static org.openqa.selenium.grid.data.Availability.UP;
23+
import static org.openqa.selenium.grid.node.CapabilityResponseEncoder.getEncoder;
24+
import static org.openqa.selenium.remote.HttpSessionId.getSessionId;
25+
import static org.openqa.selenium.remote.RemoteTags.CAPABILITIES;
26+
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID;
27+
import static org.openqa.selenium.remote.http.Contents.asJson;
28+
import static org.openqa.selenium.remote.http.Contents.string;
29+
import static org.openqa.selenium.remote.http.HttpMethod.DELETE;
30+
2031
import com.google.common.annotations.VisibleForTesting;
2132
import com.google.common.base.Ticker;
2233
import com.google.common.cache.Cache;
@@ -45,6 +56,7 @@
4556
import org.openqa.selenium.grid.data.SessionClosedEvent;
4657
import org.openqa.selenium.grid.data.Slot;
4758
import org.openqa.selenium.grid.data.SlotId;
59+
import org.openqa.selenium.grid.docker.DockerSession;
4860
import org.openqa.selenium.grid.jmx.JMXHelper;
4961
import org.openqa.selenium.grid.jmx.ManagedAttribute;
5062
import org.openqa.selenium.grid.jmx.ManagedService;
@@ -87,17 +99,6 @@
8799
import java.util.logging.Logger;
88100
import java.util.stream.Collectors;
89101

90-
import static com.google.common.collect.ImmutableSet.toImmutableSet;
91-
import static org.openqa.selenium.grid.data.Availability.DRAINING;
92-
import static org.openqa.selenium.grid.data.Availability.UP;
93-
import static org.openqa.selenium.grid.node.CapabilityResponseEncoder.getEncoder;
94-
import static org.openqa.selenium.remote.HttpSessionId.getSessionId;
95-
import static org.openqa.selenium.remote.RemoteTags.CAPABILITIES;
96-
import static org.openqa.selenium.remote.RemoteTags.SESSION_ID;
97-
import static org.openqa.selenium.remote.http.Contents.asJson;
98-
import static org.openqa.selenium.remote.http.Contents.string;
99-
import static org.openqa.selenium.remote.http.HttpMethod.DELETE;
100-
101102
@ManagedService(objectName = "org.seleniumhq.grid:type=Node,name=LocalNode",
102103
description = "Node running the webdriver sessions.")
103104
public class LocalNode extends Node {
@@ -391,6 +392,14 @@ public HttpResponse executeWebDriverCommand(HttpRequest req) {
391392

392393
@Override
393394
public HttpResponse uploadFile(HttpRequest req, SessionId id) {
395+
396+
// When the session is running in a Docker container, the upload file command
397+
// needs to be forwarded to the container as well.
398+
SessionSlot slot = currentSessions.getIfPresent(id);
399+
if (slot != null && slot.getSession() instanceof DockerSession) {
400+
return executeWebDriverCommand(req);
401+
}
402+
394403
Map<String, Object> incoming = JSON.toType(string(req), Json.MAP_TYPE);
395404

396405
File tempDir;

0 commit comments

Comments
 (0)