Skip to content

Commit 960c635

Browse files
authored
Added constructor for pre-selected image (#89)
1 parent b9fb67e commit 960c635

File tree

4 files changed

+63
-4
lines changed

4 files changed

+63
-4
lines changed

src/main/java/de/rub/nds/tls/subject/docker/DockerTlsClientInstance.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.github.dockerjava.api.model.Bind;
1414
import com.github.dockerjava.api.model.ContainerConfig;
1515
import com.github.dockerjava.api.model.HostConfig;
16+
import com.github.dockerjava.api.model.Image;
1617
import com.github.dockerjava.api.model.Volume;
1718
import de.rub.nds.tls.subject.ConnectionRole;
1819
import de.rub.nds.tls.subject.HostInfo;
@@ -39,6 +40,7 @@ public class DockerTlsClientInstance extends DockerTlsInstance {
3940

4041
// TODO move away from HostInfo for client...
4142
public DockerTlsClientInstance(
43+
Image image,
4244
String containerName,
4345
ParameterProfile profile,
4446
ImageProperties imageProperties,
@@ -51,6 +53,7 @@ public DockerTlsClientInstance(
5153
boolean connectOnStartup,
5254
UnaryOperator<HostConfig> hostConfigHook) {
5355
super(
56+
image,
5457
containerName,
5558
profile,
5659
imageProperties,

src/main/java/de/rub/nds/tls/subject/docker/DockerTlsInstance.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public abstract class DockerTlsInstance {
4242
private final UnaryOperator<HostConfig> hostConfigHook;
4343

4444
public DockerTlsInstance(
45+
Image image,
4546
String containerName,
4647
ParameterProfile profile,
4748
ImageProperties imageProperties,
@@ -66,10 +67,14 @@ public DockerTlsInstance(
6667
profile.getType().name().toLowerCase());
6768
labels.put(TlsImageLabels.VERSION.getLabelName(), version);
6869
labels.put(TlsImageLabels.CONNECTION_ROLE.getLabelName(), role.toString().toLowerCase());
69-
this.image =
70-
DOCKER.listImagesCmd().withLabelFilter(labels).exec().stream()
71-
.findFirst()
72-
.orElseThrow(TlsVersionNotFoundException::new);
70+
if (image == null) {
71+
this.image =
72+
DOCKER.listImagesCmd().withLabelFilter(labels).exec().stream()
73+
.findFirst()
74+
.orElseThrow(TlsVersionNotFoundException::new);
75+
} else {
76+
this.image = image;
77+
}
7378
}
7479

7580
protected HostConfig prepareHostConfig(HostConfig cfg) {

src/main/java/de/rub/nds/tls/subject/docker/DockerTlsManagerFactory.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public abstract static class TlsInstanceBuilder<T extends TlsInstanceBuilder<T>>
6060
protected final ParameterProfile profile;
6161
protected final ImageProperties imageProperties;
6262
protected final String version;
63+
protected Image image;
6364
protected boolean autoRemove = true;
6465
// shared constructor parameters
6566
// Host Info:
@@ -90,6 +91,21 @@ public TlsInstanceBuilder(
9091
this.transportType = transportType;
9192
}
9293

94+
public TlsInstanceBuilder(Image image, TransportType transportType) {
95+
this.version = image.getLabels().get(TlsImageLabels.VERSION.getLabelName());
96+
TlsImplementationType type =
97+
TlsImplementationType.fromString(
98+
image.getLabels().get(TlsImageLabels.IMPLEMENTATION.getLabelName()));
99+
ConnectionRole role =
100+
ConnectionRole.valueOf(
101+
image.getLabels()
102+
.get(TlsImageLabels.CONNECTION_ROLE.getLabelName())
103+
.toUpperCase());
104+
this.profile = retrieveParameterProfile(type, version, role);
105+
this.imageProperties = retrieveImageProperties(role, type);
106+
this.transportType = transportType;
107+
}
108+
93109
public T autoRemove(boolean value) {
94110
autoRemove = value;
95111
return (T) this;
@@ -206,6 +222,10 @@ public TlsClientInstanceBuilder(
206222
super(type, version, ConnectionRole.CLIENT, transportType);
207223
}
208224

225+
public TlsClientInstanceBuilder(Image image, TransportType transportType) {
226+
super(image, transportType);
227+
}
228+
209229
public TlsClientInstanceBuilder pull() {
210230
super.pull(ConnectionRole.CLIENT);
211231
return this;
@@ -214,6 +234,7 @@ public TlsClientInstanceBuilder pull() {
214234
@Override
215235
public DockerTlsClientInstance build() throws DockerException, InterruptedException {
216236
return new DockerTlsClientInstance(
237+
image,
217238
containerName,
218239
profile,
219240
imageProperties,
@@ -241,6 +262,10 @@ public TlsServerInstanceBuilder(
241262
super(type, version, ConnectionRole.SERVER, transportType);
242263
}
243264

265+
public TlsServerInstanceBuilder(Image image, TransportType transportType) {
266+
super(image, transportType);
267+
}
268+
244269
public TlsServerInstanceBuilder pull() {
245270
super.pull(ConnectionRole.SERVER);
246271
return this;
@@ -249,6 +274,7 @@ public TlsServerInstanceBuilder pull() {
249274
@Override
250275
public DockerTlsServerInstance build() throws DockerException, InterruptedException {
251276
return new DockerTlsServerInstance(
277+
image,
252278
containerName,
253279
profile,
254280
imageProperties,
@@ -349,6 +375,28 @@ public static List<Image> getAllImages() {
349375
.exec();
350376
}
351377

378+
public static Image getMatchingImage(
379+
List<Image> images, TlsImplementationType type, String version, ConnectionRole role) {
380+
return images.stream()
381+
.filter(
382+
image ->
383+
image.getLabels()
384+
.get(TlsImageLabels.VERSION.getLabelName())
385+
.equals(version))
386+
.filter(
387+
image ->
388+
image.getLabels()
389+
.get(TlsImageLabels.IMPLEMENTATION.getLabelName())
390+
.equals(type.name().toLowerCase()))
391+
.filter(
392+
image ->
393+
image.getLabels()
394+
.get(TlsImageLabels.CONNECTION_ROLE.getLabelName())
395+
.equals(role.name().toLowerCase()))
396+
.findFirst()
397+
.orElse(null);
398+
}
399+
352400
private static void executeCommand(Runtime runtime, String command, int timeout)
353401
throws InterruptedException, IOException {
354402
Process process = runtime.exec(command);

src/main/java/de/rub/nds/tls/subject/docker/DockerTlsServerInstance.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.github.dockerjava.api.command.InspectContainerResponse;
1313
import com.github.dockerjava.api.model.ExposedPort;
1414
import com.github.dockerjava.api.model.HostConfig;
15+
import com.github.dockerjava.api.model.Image;
1516
import com.github.dockerjava.api.model.NetworkSettings;
1617
import com.github.dockerjava.api.model.PortBinding;
1718
import com.github.dockerjava.api.model.Ports.Binding;
@@ -31,6 +32,7 @@ public class DockerTlsServerInstance extends DockerTlsInstance {
3132
private ExposedPort exposedImplementationPort;
3233

3334
public DockerTlsServerInstance(
35+
Image image,
3436
String containerName,
3537
ParameterProfile profile,
3638
ImageProperties imageProperties,
@@ -42,6 +44,7 @@ public DockerTlsServerInstance(
4244
boolean insecureConnection,
4345
UnaryOperator<HostConfig> hostConfigHook) {
4446
super(
47+
image,
4548
containerName,
4649
profile,
4750
imageProperties,

0 commit comments

Comments
 (0)