Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add TestcontainersHostPropertyClientStrategy #7053

Merged
merged 7 commits into from
May 26, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package org.testcontainers.dockerclient;

import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientConfig;
import org.testcontainers.utility.TestcontainersConfiguration;

import java.util.Optional;

/**
* Use <code>docker.host</code> in <code>~/.testcontainers.properties</code>
* to try and locate a docker environment.
*
* @deprecated this class is used by the SPI and should not be used directly
*/
@Deprecated
public final class TestcontainersHostPropertyClientStrategy extends DockerClientProviderStrategy {

public static final int PRIORITY = EnvironmentAndSystemPropertyClientProviderStrategy.PRIORITY - 10;

private final DockerClientConfig dockerClientConfig;

public TestcontainersHostPropertyClientStrategy() {
this(DefaultDockerClientConfig.createDefaultConfigBuilder());
}

public TestcontainersHostPropertyClientStrategy(DefaultDockerClientConfig.Builder configBuilder) {
Optional<String> tcHost = Optional.ofNullable(
TestcontainersConfiguration.getInstance().getEnvVarOrUserProperty("tc.host", null)
);

tcHost.ifPresent(configBuilder::withDockerHost);
this.dockerClientConfig = configBuilder.build();
}

@Override
public String getDescription() {
return "Testcontainers Host Strategy with tc.host=" + this.dockerClientConfig.getDockerHost();
}

@Override
public TransportConfig getTransportConfig() throws InvalidConfigurationException {
return TransportConfig
.builder()
.dockerHost(dockerClientConfig.getDockerHost())
.sslConfig(dockerClientConfig.getSSLConfig())
.build();
}

@Override
protected int getPriority() {
return PRIORITY;
}

@Override
protected boolean isPersistable() {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
org.testcontainers.dockerclient.TestcontainersHostPropertyClientStrategy
org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy
org.testcontainers.dockerclient.UnixSocketClientProviderStrategy
org.testcontainers.dockerclient.DockerMachineClientProviderStrategy
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package org.testcontainers.dockerclient;

import com.github.dockerjava.core.DefaultDockerClientConfig;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import org.testcontainers.utility.MockTestcontainersConfigurationRule;
import org.testcontainers.utility.TestcontainersConfiguration;

import java.net.URI;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isNull;

@RunWith(MockitoJUnitRunner.class)
public class TestcontainersHostPropertyClientStrategyTest {

@Rule
public MockTestcontainersConfigurationRule mockConfig = new MockTestcontainersConfigurationRule();

private URI defaultDockerHost;

private com.github.dockerjava.core.SSLConfig defaultSSLConfig;

@Before
public void checkEnvironmentClear() {
// If docker-java picks up non-default settings from the environment, our test needs to know to expect those
DefaultDockerClientConfig defaultConfig = DefaultDockerClientConfig.createDefaultConfigBuilder().build();
this.defaultDockerHost = defaultConfig.getDockerHost();
this.defaultSSLConfig = defaultConfig.getSSLConfig();
}

@Test
public void tcHostPropertyIsProvided() {
Mockito
.doReturn("tcp://127.0.0.1:9000")
.when(TestcontainersConfiguration.getInstance())
.getEnvVarOrUserProperty(eq("tc.host"), isNull());

TestcontainersHostPropertyClientStrategy strategy = new TestcontainersHostPropertyClientStrategy();

TransportConfig transportConfig = strategy.getTransportConfig();
assertThat(transportConfig.getDockerHost().toString()).isEqualTo("tcp://127.0.0.1:9000");
assertThat(transportConfig.getSslConfig()).isEqualTo(this.defaultSSLConfig);
}

@Test
public void tcHostPropertyIsNotProvided() {
Mockito
.doReturn(null)
.when(TestcontainersConfiguration.getInstance())
.getEnvVarOrUserProperty(eq("tc.host"), isNull());

TestcontainersHostPropertyClientStrategy strategy = new TestcontainersHostPropertyClientStrategy();

TransportConfig transportConfig = strategy.getTransportConfig();
assertThat(transportConfig.getDockerHost()).isEqualTo(this.defaultDockerHost);
assertThat(transportConfig.getSslConfig()).isEqualTo(this.defaultSSLConfig);
}
}