Improved Integration tests.

This commit is contained in:
Corneil du Plessis
2023-10-19 18:10:56 +02:00
parent ca421361ca
commit 05a1aa2a18
9 changed files with 33 additions and 12 deletions

View File

@@ -16,7 +16,7 @@
<description>Integration Tests for stream applications</description>
<properties>
<mariadb-client.version>2.6.2</mariadb-client.version>
<mariadb-client.version>3.1.2</mariadb-client.version>
<wiremock.version>2.27.1</wiremock.version>
<mysql-connector-java.version>8.0.28</mysql-connector-java.version>
</properties>

View File

@@ -29,7 +29,7 @@ public abstract class Configuration {
/**
* Duration.
*/
public static final Duration DEFAULT_DURATION = Duration.ofMinutes(1);
public static final Duration DEFAULT_DURATION = Duration.ofSeconds(90);
private static final String SPRING_CLOUD_STREAM_APPLICATIONS_VERSION = "spring.cloud.stream.applications.version";

View File

@@ -27,6 +27,8 @@ import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.app.test.integration.OutputMatcher;
@@ -41,7 +43,7 @@ import static org.springframework.cloud.stream.app.test.integration.AppLog.appLo
@Tag("integration")
abstract class HttpRequestProcessorTests {
private final static Logger logger = LoggerFactory.getLogger(HttpRequestProcessorTests.class);
private static MockWebServer server;
private static int serverPort;
@@ -81,7 +83,11 @@ abstract class HttpRequestProcessorTests {
});
testTopicSender.send(processor.getInputDestination(), "ping");
await().atMost(DEFAULT_DURATION)
.until(outputMatcher.messageMatches(message -> message.getPayload().equals("{\"response\":\"ping\"}")));
.until(outputMatcher.messageMatches(message -> {
Object payload = message.getPayload();
logger.info("payload:{}", payload);
return payload.equals("{\"response\":\"ping\"}");
}));
// See https://github.com/spring-cloud/spring-cloud-stream/issues/2190 .This condition is no longer true.
// && message.getHeaders().get(MessageHeaders.CONTENT_TYPE)
// .equals(MediaType.APPLICATION_JSON_VALUE)));

View File

@@ -72,7 +72,7 @@ public abstract class JdbcSinkTests {
.withEnv("SPRING_DATASOURCE_PASSWORD", "secret")
.withEnv("SPRING_DATASOURCE_DRIVER_CLASS_NAME", "org.mariadb.jdbc.Driver")
.withEnv("SPRING_DATASOURCE_URL",
"jdbc:mariadb://mysql-for-sink:3306/test")
"jdbc:mysql://mysql-for-sink:3306/test?permitMysqlScheme")
.waitingFor(Wait.forLogMessage(".*Started JdbcSink.*", 1));
startSink();
}
@@ -83,7 +83,7 @@ public abstract class JdbcSinkTests {
dataSource.setDriverClassName("org.mariadb.jdbc.Driver");
dataSource.setUsername(mySQL.getUsername());
dataSource.setPassword(mySQL.getPassword());
dataSource.setJdbcUrl("jdbc:mysql://localhost:" + mySQL.getMappedPort(3306) + "/test");
dataSource.setJdbcUrl(mySQL.getJdbcUrl() + "?permitMysqlScheme");
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute("DELETE FROM People");
await().atMost(DEFAULT_DURATION)

View File

@@ -67,11 +67,13 @@ abstract class TcpSinkTests {
sink.start();
}
@SuppressWarnings("resource")
static void startTcpServer() {
socketReady.set(false);
new Thread(() -> {
try {
socket = new ServerSocket(tcpPort, 50, InetAddress.getLocalHost()).accept();
socket = new ServerSocket(tcpPort, 16, InetAddress.getLocalHost())
.accept();
socketReady.set(true);
}
catch (IOException e) {

View File

@@ -67,7 +67,7 @@ abstract class JdbcSourceTests {
.withEnv("SPRING_DATASOURCE_USERNAME", "test")
.withEnv("SPRING_DATASOURCE_PASSWORD", "secret")
.withEnv("SPRING_DATASOURCE_DRIVER_CLASS_NAME", "org.mariadb.jdbc.Driver")
.withEnv("SPRING_DATASOURCE_URL", "jdbc:mariadb://mysql-for-source:3306/test");
.withEnv("SPRING_DATASOURCE_URL", "jdbc:mysql://mysql-for-source:3306/test?permitMysqlScheme");
startSource();
}

View File

@@ -95,7 +95,7 @@ abstract class TimeSourceTests {
webClient.get()
.uri("http://" + source.getHost() + ":" + source.getMappedPort(8080) + "/actuator/env")
.exchangeToMono(response -> {
assertThat(response.statusCode()).isEqualTo(HttpStatus.NOT_FOUND);
assertThat(response.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED);
return response.toBodilessEntity();
}).block();
}

View File

@@ -81,7 +81,7 @@ public class KafkaJdbcLogStreamTests {
.withEnv("SPRING_DATASOURCE_USERNAME", "test")
.withEnv("SPRING_DATASOURCE_DRIVER_CLASS_NAME", "org.mariadb.jdbc.Driver")
.withEnv("SPRING_DATASOURCE_URL",
"jdbc:mariadb://mysql-for-stream:3306/test"))
"jdbc:mysql://mysql-for-stream:3306/test?permitMysqlScheme"))
.withSinkContainer(
new KafkaStreamAppContainer(StreamAppContainerTestUtils.imageName(
"log-sink-kafka", VERSION)).withLogConsumer(logMatcher))

View File

@@ -10,5 +10,18 @@ VERSION=$1
if [ "$VERSION" == "" ]; then
VERSION=$($SCDIR/mvn-get-version.sh)
fi
$SCDIR/mvnw $MVN_OPT -pl applications/stream-applications-integration-tests -am install -DskipTests
$SCDIR/mvnw $MVN_OPT -pl applications/stream-applications-integration-tests verify -Pintegration -Psnapshot -Dspring.cloud.stream.applications.version=$VERSION
shift
CONTAINERS="s3-source sftp-source http-request-processor log-sink jdbc-source time-source http-source tcp-sink mongodb-sink"
BROKERS="rabbit kafka"
for container in $CONTAINERS; do
for broker in $BROKERS; do
echo "Pulling springcloudstream/${container}-${broker}:$VERSION"
docker pull "springcloudstream/${container}-${broker}:$VERSION"
docker tag "springcloudstream/${container}-${broker}:$VERSION" "springcloudstream/${container}-${broker}:latest"
done
done
echo "Using version:$VERSION"
$SCDIR/mvnw $MVN_OPT -pl :stream-applications-integration-tests -am install -DskipTests
$SCDIR/mvnw $MVN_OPT $@ -pl :stream-applications-integration-tests -Pintegration -Psnapshot test integration-test -Dspring.cloud.stream.applications.version=$VERSION