From 05a1aa2a18c18627f63bb3c97f33ee5a6d2e422a Mon Sep 17 00:00:00 2001 From: Corneil du Plessis Date: Thu, 19 Oct 2023 18:10:56 +0200 Subject: [PATCH] Improved Integration tests. --- .../pom.xml | 2 +- .../integration/test/common/Configuration.java | 2 +- .../httprequest/HttpRequestProcessorTests.java | 10 ++++++++-- .../test/sink/jdbc/JdbcSinkTests.java | 4 ++-- .../integration/test/sink/tcp/TcpSinkTests.java | 4 +++- .../test/source/jdbc/JdbcSourceTests.java | 2 +- .../test/source/time/TimeSourceTests.java | 2 +- .../stream/jdbclog/KafkaJdbcLogStreamTests.java | 2 +- run-ITs.sh | 17 +++++++++++++++-- 9 files changed, 33 insertions(+), 12 deletions(-) diff --git a/applications/stream-applications-integration-tests/pom.xml b/applications/stream-applications-integration-tests/pom.xml index 75b8d7b5..25a4e654 100644 --- a/applications/stream-applications-integration-tests/pom.xml +++ b/applications/stream-applications-integration-tests/pom.xml @@ -16,7 +16,7 @@ Integration Tests for stream applications - 2.6.2 + 3.1.2 2.27.1 8.0.28 diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/common/Configuration.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/common/Configuration.java index fa7c1489..ef13be44 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/common/Configuration.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/common/Configuration.java @@ -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"; diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/processor/httprequest/HttpRequestProcessorTests.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/processor/httprequest/HttpRequestProcessorTests.java index 26ddaf00..828b56bf 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/processor/httprequest/HttpRequestProcessorTests.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/processor/httprequest/HttpRequestProcessorTests.java @@ -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))); diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/jdbc/JdbcSinkTests.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/jdbc/JdbcSinkTests.java index 9d9711ea..03193084 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/jdbc/JdbcSinkTests.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/jdbc/JdbcSinkTests.java @@ -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) diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/tcp/TcpSinkTests.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/tcp/TcpSinkTests.java index 0af448ec..7b9f458b 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/tcp/TcpSinkTests.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/sink/tcp/TcpSinkTests.java @@ -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) { diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/jdbc/JdbcSourceTests.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/jdbc/JdbcSourceTests.java index 2b4b6c8a..1a6afda1 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/jdbc/JdbcSourceTests.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/jdbc/JdbcSourceTests.java @@ -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(); } diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/time/TimeSourceTests.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/time/TimeSourceTests.java index ae4ec26e..a8733fa4 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/time/TimeSourceTests.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/source/time/TimeSourceTests.java @@ -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(); } diff --git a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/stream/jdbclog/KafkaJdbcLogStreamTests.java b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/stream/jdbclog/KafkaJdbcLogStreamTests.java index e679f828..22a30751 100644 --- a/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/stream/jdbclog/KafkaJdbcLogStreamTests.java +++ b/applications/stream-applications-integration-tests/src/test/java/org/springframework/cloud/stream/app/integration/test/stream/jdbclog/KafkaJdbcLogStreamTests.java @@ -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)) diff --git a/run-ITs.sh b/run-ITs.sh index 383f8960..59714272 100755 --- a/run-ITs.sh +++ b/run-ITs.sh @@ -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 + +