Merge pull request #5052 from smatvienko-tb/dependency-upgrade-test-scope-testcontainers
[3.3.1] Testcontainers - dependency upgrade
This commit is contained in:
commit
05c2919f0d
@ -62,6 +62,21 @@
|
|||||||
<artifactId>takari-cpsuite</artifactId>
|
<artifactId>takari-cpsuite</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.awaitility</groupId>
|
||||||
|
<artifactId>awaitility</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>logback-classic</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
|
|||||||
@ -16,26 +16,34 @@
|
|||||||
package org.thingsboard.server.msa;
|
package org.thingsboard.server.msa;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.junit.ClassRule;
|
import org.junit.ClassRule;
|
||||||
import org.junit.extensions.cpsuite.ClasspathSuite;
|
import org.junit.extensions.cpsuite.ClasspathSuite;
|
||||||
import org.junit.rules.ExternalResource;
|
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.testcontainers.containers.DockerComposeContainer;
|
import org.testcontainers.containers.DockerComposeContainer;
|
||||||
import org.testcontainers.containers.wait.strategy.Wait;
|
import org.testcontainers.containers.wait.strategy.Wait;
|
||||||
import org.testcontainers.utility.Base58;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.Arrays;
|
import java.util.UUID;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import static org.hamcrest.CoreMatchers.containsString;
|
||||||
import java.util.Map;
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.CoreMatchers.not;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
@RunWith(ClasspathSuite.class)
|
@RunWith(ClasspathSuite.class)
|
||||||
@ClasspathSuite.ClassnameFilters({"org.thingsboard.server.msa.*Test"})
|
@ClasspathSuite.ClassnameFilters({"org.thingsboard.server.msa.*Test"})
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ContainerTestSuite {
|
public class ContainerTestSuite {
|
||||||
|
|
||||||
|
private static final String SOURCE_DIR = "./../../docker/";
|
||||||
|
private static final String TB_CORE_LOG_REGEXP = ".*Starting polling for events.*";
|
||||||
|
private static final String TRANSPORTS_LOG_REGEXP = ".*Going to recalculate partitions.*";
|
||||||
|
|
||||||
private static DockerComposeContainer<?> testContainer;
|
private static DockerComposeContainer<?> testContainer;
|
||||||
|
|
||||||
@ClassRule
|
@ClassRule
|
||||||
@ -46,31 +54,78 @@ public class ContainerTestSuite {
|
|||||||
if (testContainer == null) {
|
if (testContainer == null) {
|
||||||
boolean skipTailChildContainers = Boolean.valueOf(System.getProperty("blackBoxTests.skipTailChildContainers"));
|
boolean skipTailChildContainers = Boolean.valueOf(System.getProperty("blackBoxTests.skipTailChildContainers"));
|
||||||
try {
|
try {
|
||||||
String tbCoreLogRegexp = ".*Starting polling for events.*";
|
final String targetDir = FileUtils.getTempDirectoryPath() + "/" + "ContainerTestSuite-" + UUID.randomUUID() + "/";
|
||||||
String transportsLogRegexp = ".*Going to recalculate partitions.*";
|
log.info("targetDir {}", targetDir);
|
||||||
|
FileUtils.copyDirectory(new File(SOURCE_DIR), new File(targetDir));
|
||||||
|
replaceInFile(targetDir + "docker-compose.yml", " container_name: \"${LOAD_BALANCER_NAME}\"", "", "container_name");
|
||||||
|
|
||||||
testContainer = new DockerComposeContainer<>(
|
class DockerComposeContainerImpl<SELF extends DockerComposeContainer<SELF>> extends DockerComposeContainer<SELF> {
|
||||||
new File("./../../docker/docker-compose.yml"),
|
public DockerComposeContainerImpl(File... composeFiles) {
|
||||||
new File("./../../docker/docker-compose.postgres.yml"),
|
super(composeFiles);
|
||||||
new File("./../../docker/docker-compose.postgres.volumes.yml"),
|
}
|
||||||
new File("./../../docker/docker-compose.kafka.yml"))
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
super.stop();
|
||||||
|
tryDeleteDir(targetDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testContainer = new DockerComposeContainerImpl<>(
|
||||||
|
new File(targetDir + "docker-compose.yml"),
|
||||||
|
new File(targetDir + "docker-compose.postgres.yml"),
|
||||||
|
new File(targetDir + "docker-compose.postgres.volumes.yml"),
|
||||||
|
new File(targetDir + "docker-compose.kafka.yml"))
|
||||||
.withPull(false)
|
.withPull(false)
|
||||||
.withLocalCompose(true)
|
.withLocalCompose(true)
|
||||||
.withTailChildContainers(!skipTailChildContainers)
|
.withTailChildContainers(!skipTailChildContainers)
|
||||||
.withEnv(installTb.getEnv())
|
.withEnv(installTb.getEnv())
|
||||||
.withEnv("LOAD_BALANCER_NAME", "")
|
.withEnv("LOAD_BALANCER_NAME", "")
|
||||||
.withExposedService("haproxy", 80, Wait.forHttp("/swagger-ui.html").withStartupTimeout(Duration.ofSeconds(400)))
|
.withExposedService("haproxy", 80, Wait.forHttp("/swagger-ui.html").withStartupTimeout(Duration.ofSeconds(400)))
|
||||||
.waitingFor("tb-core1", Wait.forLogMessage(tbCoreLogRegexp, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
.waitingFor("tb-core1", Wait.forLogMessage(TB_CORE_LOG_REGEXP, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
||||||
.waitingFor("tb-core2", Wait.forLogMessage(tbCoreLogRegexp, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
.waitingFor("tb-core2", Wait.forLogMessage(TB_CORE_LOG_REGEXP, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
||||||
.waitingFor("tb-http-transport1", Wait.forLogMessage(transportsLogRegexp, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
.waitingFor("tb-http-transport1", Wait.forLogMessage(TRANSPORTS_LOG_REGEXP, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
||||||
.waitingFor("tb-http-transport2", Wait.forLogMessage(transportsLogRegexp, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
.waitingFor("tb-http-transport2", Wait.forLogMessage(TRANSPORTS_LOG_REGEXP, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
||||||
.waitingFor("tb-mqtt-transport1", Wait.forLogMessage(transportsLogRegexp, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
.waitingFor("tb-mqtt-transport1", Wait.forLogMessage(TRANSPORTS_LOG_REGEXP, 1).withStartupTimeout(Duration.ofSeconds(400)))
|
||||||
.waitingFor("tb-mqtt-transport2", Wait.forLogMessage(transportsLogRegexp, 1).withStartupTimeout(Duration.ofSeconds(400)));
|
.waitingFor("tb-mqtt-transport2", Wait.forLogMessage(TRANSPORTS_LOG_REGEXP, 1).withStartupTimeout(Duration.ofSeconds(400)));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Failed to create test container", e);
|
log.error("Failed to create test container", e);
|
||||||
throw e;
|
fail("Failed to create test container");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return testContainer;
|
return testContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void tryDeleteDir(String targetDir) {
|
||||||
|
try {
|
||||||
|
log.info("Trying to delete temp dir {}", targetDir);
|
||||||
|
FileUtils.deleteDirectory(new File(targetDir));
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Can't delete temp directory " + targetDir, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This workaround is actual until issue will be resolved:
|
||||||
|
* Support container_name in docker-compose file #2472 https://github.com/testcontainers/testcontainers-java/issues/2472
|
||||||
|
* docker-compose files which contain container_name are not supported and the creation of DockerComposeContainer fails due to IllegalStateException.
|
||||||
|
* This has been introduced in #1151 as a quick fix for unintuitive feedback. https://github.com/testcontainers/testcontainers-java/issues/1151
|
||||||
|
* Using the latest testcontainers and waiting for the fix...
|
||||||
|
* */
|
||||||
|
private static void replaceInFile(String sourceFilename, String target, String replacement, String verifyPhrase) {
|
||||||
|
try {
|
||||||
|
File file = new File(sourceFilename);
|
||||||
|
String sourceContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
String outputContent = sourceContent.replace(target, replacement);
|
||||||
|
assertThat(outputContent, (not(containsString(target))));
|
||||||
|
assertThat(outputContent, (not(containsString(verifyPhrase))));
|
||||||
|
|
||||||
|
FileUtils.writeStringToFile(file, outputContent, StandardCharsets.UTF_8);
|
||||||
|
assertThat(FileUtils.readFileToString(file, StandardCharsets.UTF_8), is(outputContent));
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("failed to update file " + sourceFilename, e);
|
||||||
|
fail("failed to update file");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
pom.xml
10
pom.xml
@ -123,8 +123,8 @@
|
|||||||
<spring-test-dbunit.version>1.3.0</spring-test-dbunit.version> <!-- 2016 -->
|
<spring-test-dbunit.version>1.3.0</spring-test-dbunit.version> <!-- 2016 -->
|
||||||
<takari-cpsuite.version>1.2.7</takari-cpsuite.version> <!-- 2015 -->
|
<takari-cpsuite.version>1.2.7</takari-cpsuite.version> <!-- 2015 -->
|
||||||
<!-- BLACKBOX TEST SCOPE -->
|
<!-- BLACKBOX TEST SCOPE -->
|
||||||
<testcontainers.version>1.11.4</testcontainers.version>
|
<testcontainers.version>1.16.0</testcontainers.version>
|
||||||
<zeroturnaround.version>1.10</zeroturnaround.version>
|
<zeroturnaround.version>1.12</zeroturnaround.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
@ -1736,6 +1736,12 @@
|
|||||||
<artifactId>testcontainers</artifactId>
|
<artifactId>testcontainers</artifactId>
|
||||||
<version>${testcontainers.version}</version>
|
<version>${testcontainers.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.zeroturnaround</groupId>
|
<groupId>org.zeroturnaround</groupId>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user