Skip to content

Commit 022ef15

Browse files
srempferrnorth
authored andcommitted
Load DockerClientProviderStrategy via ServiceLoader (#434) (#435)
1 parent 27ac21f commit 022ef15

4 files changed

Lines changed: 26 additions & 22 deletions

File tree

core/src/main/java/org/testcontainers/DockerClientFactory.java

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525
import java.io.InputStream;
2626
import java.net.Socket;
2727
import java.nio.charset.Charset;
28+
import java.util.ArrayList;
2829
import java.util.List;
2930
import java.util.Optional;
31+
import java.util.ServiceLoader;
3032
import java.util.function.BiFunction;
3133
import java.util.function.Consumer;
3234

33-
import static java.util.Arrays.asList;
34-
3535
/**
3636
* Singleton class that provides initialized Docker clients.
3737
* <p>
@@ -46,13 +46,6 @@ public class DockerClientFactory {
4646
// Cached client configuration
4747
private DockerClientProviderStrategy strategy;
4848
private boolean preconditionsChecked = false;
49-
50-
private static final List<DockerClientProviderStrategy> CONFIGURATION_STRATEGIES =
51-
asList(new EnvironmentAndSystemPropertyClientProviderStrategy(),
52-
new UnixSocketClientProviderStrategy(),
53-
new ProxiedUnixSocketClientProviderStrategy(),
54-
new DockerMachineClientProviderStrategy(),
55-
new WindowsClientProviderStrategy());
5649
private String activeApiVersion;
5750
private String activeExecutionDriver;
5851

@@ -91,7 +84,10 @@ public DockerClient client() {
9184
return strategy.getClient();
9285
}
9386

94-
strategy = DockerClientProviderStrategy.getFirstValidStrategy(CONFIGURATION_STRATEGIES);
87+
List<DockerClientProviderStrategy> configurationStrategies = new ArrayList<DockerClientProviderStrategy>();
88+
ServiceLoader.load(DockerClientProviderStrategy.class).forEach( cs -> configurationStrategies.add( cs ) );
89+
90+
strategy = DockerClientProviderStrategy.getFirstValidStrategy(configurationStrategies);
9591

9692
String hostIpAddress = strategy.getDockerHostIpAddress();
9793
log.info("Docker host IP address is {}", hostIpAddress);

core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,4 @@ protected void ping(DockerClient client, int timeoutInSeconds) {
170170
public String getDockerHostIpAddress() {
171171
return DockerClientConfigUtils.getDockerHostIpAddress(this.config);
172172
}
173-
174-
175-
class InvalidConfigurationException extends RuntimeException {
176-
177-
public InvalidConfigurationException(String s) {
178-
super(s);
179-
}
180-
181-
public InvalidConfigurationException(String message, Throwable cause) {
182-
super(message, cause);
183-
}
184-
}
185173
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.testcontainers.dockerclient;
2+
3+
/**
4+
* Exception to indicate that a {@link DockerClientProviderStrategy} fails.
5+
*/
6+
public class InvalidConfigurationException extends RuntimeException {
7+
8+
public InvalidConfigurationException(String s) {
9+
super(s);
10+
}
11+
12+
public InvalidConfigurationException(String message, Throwable cause) {
13+
super(message, cause);
14+
}
15+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy
2+
org.testcontainers.dockerclient.UnixSocketClientProviderStrategy
3+
org.testcontainers.dockerclient.ProxiedUnixSocketClientProviderStrategy
4+
org.testcontainers.dockerclient.DockerMachineClientProviderStrategy
5+
org.testcontainers.dockerclient.WindowsClientProviderStrategy

0 commit comments

Comments
 (0)