openvidu-test-e2e: make host.docker.internal a secure domain for netem Chrome

pull/904/head
pabloFuente 2026-06-22 23:42:11 +02:00
parent b03080422a
commit 8f687331e1
2 changed files with 25 additions and 5 deletions

View File

@ -81,6 +81,12 @@ public class ChromeUser extends BrowserUser {
options.addArguments("--mute-audio");
}
String treatSecureOrigin = System.getProperty("CHROME_TREAT_INSECURE_ORIGIN_AS_SECURE");
if (treatSecureOrigin != null && !treatSecureOrigin.isBlank()) {
options.addArguments("--unsafely-treat-insecure-origin-as-secure=" + treatSecureOrigin);
options.addArguments("--user-data-dir=/tmp/chrome-netem-profile");
}
if (REMOTE_URL != null && !REMOTE_URL.isBlank()) {
log.info("Using URL {} to connect to remote web driver", REMOTE_URL);
try {

View File

@ -227,6 +227,13 @@ public class OpenViduTestE2e {
return this.netemContainerNames.get(browserUser);
}
// scheme://host[:port] of a URL (drops any path/trailing slash), for use as a
// browser origin.
private static String originOf(String url) {
java.net.URI u = java.net.URI.create(url.trim());
return u.getScheme() + "://" + u.getHost() + (u.getPort() > 0 ? ":" + u.getPort() : "");
}
private GenericContainer<?> firefoxContainer(String image, long shmSize, int maxBrowserSessions, boolean headless) {
Map<String, String> map = new HashMap<>();
map.put("SE_OPTS", "--port 4445");
@ -524,11 +531,7 @@ public class OpenViduTestE2e {
browserUser = new ChromeUser("TestUser", 50, headless);
break;
case "chromeNetwork":
// Bridged Chrome (in its own isolated Docker network) targetable by Pumba. A
// unique name
// (millis + counter) lets several run simultaneously; it is mapped to its
// BrowserUser below
// so a test can resolve it for Pumba via getNetemContainerName(user).
// Bridged Chrome (in its own isolated Docker network) targetable by Pumba
String netemContainerName = "openvidu-test-chrome-netem-" + System.currentTimeMillis() + "-"
+ this.netemContainerCounter.incrementAndGet();
container = chromeContainerNetem("selenium/standalone-chrome:" + CHROME_VERSION, 2147483648L, 1,
@ -540,6 +543,12 @@ public class OpenViduTestE2e {
// REMOTE_URL_CHROME. Restore the property afterwards
String previousRemoteUrlChrome = System.getProperty("REMOTE_URL_CHROME");
System.setProperty("REMOTE_URL_CHROME", "http://localhost:" + container.getMappedPort(4444));
// The netem browser reaches the testapp via host.docker.internal; over plain
// HTTP that is an insecure context (no mediaDevices / Web Crypto). Mark that
// origin as secure for this browser.
String netemAppOrigin = originOf(APP_URL.replace("localhost", "host.docker.internal"));
String previousSecureOrigin = System.getProperty("CHROME_TREAT_INSECURE_ORIGIN_AS_SECURE");
System.setProperty("CHROME_TREAT_INSECURE_ORIGIN_AS_SECURE", netemAppOrigin);
try {
browserUser = new ChromeUser("TestUser", 50, headless);
} finally {
@ -548,6 +557,11 @@ public class OpenViduTestE2e {
} else {
System.setProperty("REMOTE_URL_CHROME", previousRemoteUrlChrome);
}
if (previousSecureOrigin == null) {
System.clearProperty("CHROME_TREAT_INSECURE_ORIGIN_AS_SECURE");
} else {
System.setProperty("CHROME_TREAT_INSECURE_ORIGIN_AS_SECURE", previousSecureOrigin);
}
}
this.netemContainerNames.put(browserUser, netemContainerName);
break;