[Improvement][E2E] use testcontainers host (#8224)

This commit is contained in:
wind 2022-01-27 19:15:05 +08:00 committed by GitHub
parent a11fbf8352
commit 756ea1181e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -47,6 +47,7 @@ import org.junit.runners.model.Statement;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.Testcontainers;
import org.testcontainers.containers.BrowserWebDriverContainer;
import org.testcontainers.containers.ContainerState;
import org.testcontainers.containers.DockerComposeContainer;
@ -69,6 +70,9 @@ final class DolphinSchedulerExtension
private RemoteWebDriver driver;
private DockerComposeContainer<?> compose;
private BrowserWebDriverContainer<?> browser;
private Network network;
private HostAndPort address;
private String rootPath;
@Override
@SuppressWarnings("UnstableApiUsage")
@ -76,33 +80,10 @@ final class DolphinSchedulerExtension
Awaitility.setDefaultTimeout(Duration.ofSeconds(60));
Awaitility.setDefaultPollInterval(Duration.ofSeconds(10));
Network network = null;
HostAndPort address = null;
String rootPath = "/";
if (!LOCAL_MODE) {
compose = createDockerCompose(context);
compose.start();
final ContainerState dsContainer = compose.getContainerByServiceName("dolphinscheduler_1")
.orElseThrow(() -> new RuntimeException("Failed to find a container named 'dolphinscheduler'"));
final String networkId = dsContainer.getContainerInfo().getNetworkSettings().getNetworks().keySet().iterator().next();
network = new Network() {
@Override
public String getId() {
return networkId;
}
@Override
public void close() {
}
@Override
public Statement apply(Statement base, Description description) {
return null;
}
};
address = HostAndPort.fromParts("dolphinscheduler", 12345);
rootPath = "/dolphinscheduler";
if (LOCAL_MODE) {
runInLocal();
} else {
runInDockerContainer(context);
}
final Path record;
@ -135,18 +116,7 @@ final class DolphinSchedulerExtension
.pageLoadTimeout(5, TimeUnit.SECONDS);
driver.manage().window()
.maximize();
if (address == null) {
try {
address = HostAndPort.fromParts(browser.getTestHostIpAddress(), 8888);
} catch (UnsupportedOperationException ignored) {
if (SystemUtils.IS_OS_MAC || SystemUtils.IS_OS_MAC_OSX) {
address = HostAndPort.fromParts("host.docker.internal", 8888);
}
}
}
if (address == null) {
throw new UnsupportedOperationException("Unsupported operation system");
}
driver.get(new URL("http", address.getHost(), address.getPort(), rootPath).toString());
browser.beforeTest(new TestDescription(context));
@ -158,6 +128,38 @@ final class DolphinSchedulerExtension
.forEach(it -> setDriver(clazz, it));
}
private void runInLocal() {
Testcontainers.exposeHostPorts(8888);
address = HostAndPort.fromParts("host.testcontainers.internal", 8888);
rootPath = "/";
}
private void runInDockerContainer(ExtensionContext context) {
compose = createDockerCompose(context);
compose.start();
final ContainerState dsContainer = compose.getContainerByServiceName("dolphinscheduler_1")
.orElseThrow(() -> new RuntimeException("Failed to find a container named 'dolphinscheduler'"));
final String networkId = dsContainer.getContainerInfo().getNetworkSettings().getNetworks().keySet().iterator().next();
network = new Network() {
@Override
public String getId() {
return networkId;
}
@Override
public void close() {
}
@Override
public Statement apply(Statement base, Description description) {
return null;
}
};
address = HostAndPort.fromParts("dolphinscheduler", 12345);
rootPath = "/dolphinscheduler";
}
@Override
public void afterAll(ExtensionContext context) {
browser.afterTest(new TestDescription(context), Optional.empty());