Skip to content

Commit 43d162e

Browse files
committed
fix integration tests for windows pt 2
1 parent 4eac887 commit 43d162e

File tree

1 file changed

+50
-15
lines changed

1 file changed

+50
-15
lines changed

TLS-Server-Scanner/src/test/java/de/rub/nds/tlsscanner/serverscanner/test/AbstractDockerbasedIT.java

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,16 @@
2222
import java.security.Security;
2323
import java.util.List;
2424
import java.util.UUID;
25+
import org.apache.logging.log4j.LogManager;
26+
import org.apache.logging.log4j.Logger;
2527
import org.bouncycastle.jce.provider.BouncyCastleProvider;
2628
import org.junit.Assume;
2729
import org.junit.jupiter.api.*;
2830

2931
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
3032
public abstract class AbstractDockerbasedIT {
33+
private static final Logger LOGGER = LogManager.getLogger();
34+
3135
private static List<Image> localImages;
3236

3337
private final TlsImplementationType implementation;
@@ -36,6 +40,10 @@ public abstract class AbstractDockerbasedIT {
3640
private final TransportType transportType;
3741

3842
private DockerTlsServerInstance dockerInstance;
43+
private String serverAddress;
44+
45+
private static final int MAX_TRIES = 10;
46+
private static final int WAIT_TIME_MS = 500;
3947

4048
public AbstractDockerbasedIT(
4149
TlsImplementationType implementation,
@@ -94,6 +102,47 @@ private void createDockerInstance(Image image) throws DockerException, Interrupt
94102
.additionalParameters(additionalParameters);
95103
dockerInstance = serverInstanceBuilder.build();
96104
dockerInstance.start();
105+
saveServerAddress();
106+
}
107+
108+
private void saveServerAddress() {
109+
InspectContainerCmd cmd =
110+
DockerClientManager.getDockerClient()
111+
.inspectContainerCmd(this.dockerInstance.getId());
112+
InspectContainerResponse response;
113+
Ports.Binding serverPortBinding = null;
114+
for (int currentTry = 0; currentTry < MAX_TRIES; currentTry++) {
115+
response = cmd.exec();
116+
Ports.Binding[] serverPortBindings =
117+
response.getNetworkSettings().getPorts().getBindings().values().stream()
118+
.findFirst()
119+
.orElse(new Ports.Binding[] {});
120+
if (serverPortBindings.length >= 1) {
121+
serverPortBinding = serverPortBindings[0];
122+
break;
123+
} else {
124+
LOGGER.info(
125+
"Could not determine container port binding. Retrying in {} ms...",
126+
WAIT_TIME_MS);
127+
try {
128+
Thread.sleep(WAIT_TIME_MS);
129+
} catch (InterruptedException e) {
130+
Thread.currentThread().interrupt();
131+
throw new RuntimeException("Interrupted while waiting for port bindings", e);
132+
}
133+
}
134+
}
135+
136+
if (serverPortBinding == null) {
137+
Assertions.fail("Could not load assigned port for docker container.");
138+
}
139+
140+
int serverPort = Integer.parseInt(serverPortBinding.getHostPortSpec());
141+
String serverName =
142+
serverPortBinding.getHostIp().equals("0.0.0.0")
143+
? "127.0.0.1"
144+
: serverPortBinding.getHostIp();
145+
this.serverAddress = serverName + ":" + serverPort;
97146
}
98147

99148
@AfterEach
@@ -108,20 +157,6 @@ protected void killContainer() {
108157
}
109158

110159
protected String getServerAddress() {
111-
InspectContainerCmd cmd =
112-
DockerClientManager.getDockerClient()
113-
.inspectContainerCmd(this.dockerInstance.getId());
114-
InspectContainerResponse response = cmd.exec();
115-
Ports.Binding serverPortBinding =
116-
response.getNetworkSettings().getPorts().getBindings().values().stream()
117-
.findFirst()
118-
.orElseThrow(IllegalArgumentException::new)[0];
119-
120-
int serverPort = Integer.parseInt(serverPortBinding.getHostPortSpec());
121-
String serverName =
122-
serverPortBinding.getHostIp().equals("0.0.0.0")
123-
? "127.0.0.1"
124-
: serverPortBinding.getHostIp();
125-
return serverName + ":" + serverPort;
160+
return serverAddress;
126161
}
127162
}

0 commit comments

Comments
 (0)