Skip to content
Merged
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
1 change: 1 addition & 0 deletions tests/common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
<TEST_VAR5>true1</TEST_VAR5>

<YDB_DOCKER_ISOLATION>true</YDB_DOCKER_ISOLATION>
<YDB_DOCKER_REUSE>false</YDB_DOCKER_REUSE>
</environmentVariables>
</configuration>
</plugin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class YdbEnvironment {
private final Supplier<String> dockerPemPath = createParam("YDB_DOCKER_PEM_PATH", "/ydb_certs/ca.pem");
private final Supplier<String> dockerFeatures = createParam("YDB_DOCKER_FEATURE_FLAGS", "");
private final Supplier<Boolean> dockerReuse = createParam("YDB_DOCKER_REUSE", true);
private final Supplier<String> dockerHealthcheckCmd = createParam("YDB_DOCKER_HEALTHCHECK", null);

private final Supplier<Boolean> cleanUpTests = createParam("YDB_CLEAN_UP", true);
private final Supplier<Boolean> disableIntegrationTests = createParam("YDB_DISABLE_INTEGRATION_TESTS", false);
Expand Down Expand Up @@ -67,6 +68,10 @@ public String dockerFeatures() {
return dockerFeatures.get();
}

public String dockerHealthcheckCmd() {
return dockerHealthcheckCmd.get();
}

public boolean cleanUpTests() {
return cleanUpTests.get();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,12 @@ public void init() {
.withName(id)
.withHostName(getHost()));

waitingFor(Wait.forHealthcheck());
String healthcheck = env.dockerHealthcheckCmd();
if (healthcheck == null || healthcheck.isEmpty()) {
waitingFor(Wait.forHealthcheck());
} else {
waitingFor(Wait.forSuccessfulCommand(healthcheck));
}

// Register container cleaner
ResourceReaper.instance().registerLabelsFilterForCleanup(Collections.singletonMap(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.containers.wait.strategy.WaitStrategy;
import org.testcontainers.core.CreateContainerCmdModifier;
import org.testcontainers.utility.ThrowingFunction;

Expand Down Expand Up @@ -68,6 +70,11 @@ public <T> T copyFileFromContainer(String containerPath, ThrowingFunction<InputS
throw new AssertionError("mock error", ex);
}
}

@Override
public WaitStrategy getWaitStrategy() {
return super.getWaitStrategy();
}
}

private final DockerMock dockerMock = new DockerMock();
Expand Down Expand Up @@ -156,9 +163,10 @@ public void tlsDockerContainerTests() {
transportMock.setup("/local");

PortsGenerator ports = Mockito.mock(PortsGenerator.class);
Mockito.when(ports.findAvailablePort()).thenReturn(/* Secure */ 22, /* Insecure */ 33);
Mockito.when(ports.findAvailablePort()).thenReturn(/* Secure */ 22, /* Insecure */ 33, /* Kafka */ 44);

YdbEnvironmentMock env = new YdbEnvironmentMock()
.withDockerHealthcheck("") // must be ignored
.withUseTLS(true)
.withToken("SIMPLE_TOKEN")
.withFeatures("enable_views")
Expand All @@ -173,11 +181,14 @@ public void tlsDockerContainerTests() {
try (YdbHelper helper = factory.createHelper()) {
Assert.assertEquals("check container is started", 1, container.starts);
Assert.assertEquals("check container is stopped", 0, container.stops);
Assert.assertSame("check container wait strategy", Wait.forHealthcheck().getClass(),
container.getWaitStrategy().getClass());

assertCreateContainerCmdModifiers(container);

Assert.assertTrue("check helper use tls", helper.useTls());
Assert.assertEquals("check helper endpoint", "mocked:122", helper.endpoint());
Assert.assertEquals("check container kafka", "mocked:144", container.nonSecureKafkaEndpoint());
Assert.assertEquals("check helper database", "/local", helper.database());
Assert.assertNull("check helper auth token", helper.authToken());
Assert.assertArrayEquals("check helper database", container.pemCert, helper.pemCert());
Expand Down Expand Up @@ -334,4 +345,36 @@ public void dockerIsolationContainerTests() {
Assert.assertEquals("check container is started", 2, container.starts);
Assert.assertEquals("check container is stopped", 0, container.stops);
}

@Test
public void dockerCustomHealthCheckTest() {
dockerMock.setup(Boolean.TRUE, Boolean.TRUE);
transportMock.setup("/local");

PortsGenerator ports = Mockito.mock(PortsGenerator.class);

YdbEnvironmentMock env = new YdbEnvironmentMock()
.withDockerReuse(false)
.withDockerHealthcheck("/test");

YdbMockContainer container = new YdbMockContainer(env, ports);
DockerHelperFactory factory = new DockerHelperFactory(env, container);

Assert.assertEquals("check container is started", 0, container.starts);
Assert.assertEquals("check container is stopped", 0, container.stops);

try (YdbHelper helper = factory.createHelper()) {
Assert.assertEquals("check container is started", 1, container.starts);
Assert.assertEquals("check container is stopped", 0, container.stops);
Assert.assertSame("check container wait strategy", Wait.forSuccessfulCommand("/test").getClass(),
container.getWaitStrategy().getClass());

assertCreateContainerCmdModifiers(container);

try (GrpcTransport transport = helper.createTransport()) {
Assert.assertEquals("/local", transport.getDatabase());
Assert.assertTrue(transport.unaryCall(null, null, null).join().isSuccess());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ public void testProxedDocker() throws InvalidProtocolBufferException {
.unpack(SchemeOperationProtos.DescribePathResult.class);

Assert.assertEquals(helper.database(), "/" + result.getSelf().getName());
Assert.assertNull(helper.authToken());
Assert.assertNull(helper.pemCert());
Assert.assertFalse(helper.useTls());
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class YdbEnvironmentMock extends YdbEnvironment {
private boolean useTLS = false;
private boolean dockerReuse = false;
private boolean dockerIsolation = false;
private String dockerHealthcheck = null;
private boolean disabledTests = false;

public YdbEnvironmentMock withDatabase(String value) {
Expand Down Expand Up @@ -55,6 +56,11 @@ public YdbEnvironmentMock withDockerIsolation(boolean value) {
return this;
}

public YdbEnvironmentMock withDockerHealthcheck(String value) {
this.dockerHealthcheck = value;
return this;
}

public YdbEnvironmentMock withTestDisabled(boolean value) {
this.disabledTests = value;
return this;
Expand Down Expand Up @@ -104,4 +110,9 @@ public boolean useDockerIsolation() {
public boolean disableIntegrationTests() {
return disabledTests;
}

@Override
public String dockerHealthcheckCmd() {
return dockerHealthcheck;
}
}
Loading