Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.testcontainers.DockerClientFactory;
import org.testcontainers.utility.TestcontainersConfiguration;

import java.io.File;
import java.net.URI;
Expand All @@ -17,32 +18,45 @@ public class DockerClientConfigUtils {
public static final boolean IN_A_CONTAINER = new File("/.dockerenv").exists();

@Getter(lazy = true)
private static final Optional<String> defaultGateway = Optional
.ofNullable(
DockerClientFactory
.instance()
.runInsideDocker(
cmd -> cmd.withCmd("sh", "-c", "ip route|awk '/default/ { print $3 }'"),
(client, id) -> {
try {
LogToStringContainerCallback loggingCallback = new LogToStringContainerCallback();
client
.logContainerCmd(id)
.withStdOut(true)
.withFollowStream(true)
.exec(loggingCallback)
.awaitStarted();
loggingCallback.awaitCompletion(3, TimeUnit.SECONDS);
return loggingCallback.toString();
} catch (Exception e) {
log.warn("Can't parse the default gateway IP", e);
return null;
}
}
private static final Optional<String> defaultGateway = resolveDefaultGateway();

static Optional<String> resolveDefaultGateway() {
if (TestcontainersConfiguration.getInstance().isDisableChecks()) {
log.debug("Checks are disabled, skipping default gateway detection");
return Optional.empty();
}
try {
return Optional
.ofNullable(
DockerClientFactory
.instance()
.runInsideDocker(
cmd -> cmd.withCmd("sh", "-c", "ip route|awk '/default/ { print $3 }'"),
(client, id) -> {
try {
LogToStringContainerCallback loggingCallback = new LogToStringContainerCallback();
client
.logContainerCmd(id)
.withStdOut(true)
.withFollowStream(true)
.exec(loggingCallback)
.awaitStarted();
loggingCallback.awaitCompletion(3, TimeUnit.SECONDS);
return loggingCallback.toString();
} catch (Exception e) {
log.warn("Can't parse the default gateway IP", e);
return null;
}
}
)
)
)
.map(StringUtils::trimToEmpty)
.filter(StringUtils::isNotBlank);
.map(StringUtils::trimToEmpty)
.filter(StringUtils::isNotBlank);
} catch (Exception e) {
log.warn("Can't detect the default gateway", e);
return Optional.empty();
}
}

/**
* @deprecated use {@link DockerClientProviderStrategy#getDockerHostIpAddress()}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@
import org.assertj.core.api.Assumptions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.testcontainers.DockerClientFactory;
import org.testcontainers.utility.MockTestcontainersConfigurationExtension;
import org.testcontainers.utility.TestcontainersConfiguration;

import java.net.URI;

import static org.assertj.core.api.Assertions.assertThat;

@ExtendWith(MockTestcontainersConfigurationExtension.class)
class DockerClientConfigUtilsTest {

DockerClient client = DockerClientFactory.lazyClient();
Expand Down Expand Up @@ -61,4 +66,12 @@ void getDockerHostIpAddressShouldReturnNullWhenUnsupportedUriScheme() {
void getDefaultGateway() {
assertThat(DockerClientConfigUtils.getDefaultGateway()).isNotNull();
}

@Test
@Timeout(5)
void resolveDefaultGatewayShouldNotRunContainerWhenChecksAreDisabled() {
Mockito.doReturn(true).when(TestcontainersConfiguration.getInstance()).isDisableChecks();

assertThat(DockerClientConfigUtils.resolveDefaultGateway()).isEmpty();
}
}