From b85f288c03f6ffc6787148c24bca3adb816f7282 Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Wed, 28 May 2025 11:06:57 -0400 Subject: [PATCH 1/4] Improve Netty test variants * Only run driver-core and driver-reactive-streams test suites, each in its own task (as we do in other variants). * Use Netty configuration in all unified reactive tests, increasing coverage of Netty in driver-reactive-streams JAVA-5887 --- .evergreen/.evg.yml | 38 +++++++++---------- .evergreen/run-tests.sh | 15 ++++---- .../com/mongodb/ClusterFixture.java | 4 +- .../ClientSideOperationTimeoutTest.java | 13 ------- .../unified/UnifiedReactiveStreamsTest.java | 7 +++- 5 files changed, 33 insertions(+), 44 deletions(-) diff --git a/.evergreen/.evg.yml b/.evergreen/.evg.yml index d16766ba6f6..6ef6e3a307a 100644 --- a/.evergreen/.evg.yml +++ b/.evergreen/.evg.yml @@ -458,6 +458,7 @@ functions: export CRYPT_SHARED_LIB_PATH=${CRYPT_SHARED_LIB_PATH} + ASYNC_TRANSPORT="${ASYNC_TRANSPORT}" NETTY_SSL_PROVIDER="${NETTY_SSL_PROVIDER}" \ AUTH="${AUTH}" SSL="${SSL}" MONGODB_URI="${MONGODB_URI}" TOPOLOGY="${TOPOLOGY}" \ COMPRESSOR="${COMPRESSOR}" JAVA_VERSION="${JAVA_VERSION}" REQUIRE_API_VERSION=${REQUIRE_API_VERSION} \ TESTS="${TESTS}" .evergreen/run-tests.sh @@ -533,18 +534,6 @@ functions: ${PREPARE_SHELL} AUTH="${AUTH}" MONGODB_URI="${MONGODB_URI}" TOPOLOGY="${TOPOLOGY}" COMPRESSOR="${COMPRESSOR}" JAVA_VERSION="${JAVA_VERSION}" .evergreen/run-socket-tests.sh - "run-netty-tests": - - command: shell.exec - type: "test" - params: - working_dir: "src" - script: | - ${PREPARE_SHELL} - STREAM_TYPE="netty" AUTH="${AUTH}" SSL="${SSL}" NETTY_SSL_PROVIDER="${NETTY_SSL_PROVIDER}" MONGODB_URI="${MONGODB_URI}" \ - TOPOLOGY="${TOPOLOGY}" COMPRESSOR="${COMPRESSOR}" JAVA_VERSION="${JAVA_VERSION}" \ - AZUREKMS_KEY_VAULT_ENDPOINT=${testazurekms_keyvaultendpoint} AZUREKMS_KEY_NAME=${testazurekms_keyname} \ - .evergreen/run-tests.sh - "run-plain-auth-test": - command: shell.exec type: "test" @@ -1552,11 +1541,6 @@ tasks: - func: "start-mongo-orchestration" - func: "run-socket-tests" - - name: "netty-test-task" - commands: - - func: "start-mongo-orchestration" - - func: "run-netty-tests" - - name: "publish-snapshot-task" depends_on: - variant: "static-checks" @@ -1850,6 +1834,14 @@ axes: variables: SSL: "nossl" + - id: async_transport + display_name: Async Transport + values: + - id: "netty" + display_name: Netty + variables: + ASYNC_TRANSPORT: "netty" + - id: "netty-ssl-provider" display_name: "Netty TLS/SSL protocol provider" values: @@ -2467,18 +2459,22 @@ buildvariants: - name: "socket-test-task" - matrix_name: "tests-netty" - matrix_spec: { auth: "noauth", ssl: "*", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux" } + matrix_spec: { auth: "noauth", ssl: "*", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux", + async_transport: "netty" } display_name: "Netty: ${version} ${topology} ${ssl} ${auth} ${jdk} ${os} " tags: [ "tests-netty-variant" ] tasks: - - name: "netty-test-task" + - name: "test-reactive" + - name: "test-core" - matrix_name: "tests-netty-ssl-provider" - matrix_spec: { netty-ssl-provider: "*", auth: "auth", ssl: "ssl", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux" } + matrix_spec: { auth: "auth", ssl: "ssl", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux", + async_transport: "netty", netty-ssl-provider: "*" } display_name: "Netty SSL provider: ${version} ${topology} ${ssl} SslProvider.${netty-ssl-provider} ${auth} ${jdk} ${os} " tags: [ "tests-netty-variant" ] tasks: - - name: "netty-test-task" + - name: "test-reactive" + - name: "test-core" - matrix_name: "tests-socket-snappy-compression" matrix_spec: { compressor: "snappy", auth: "noauth", ssl: "nossl", jdk: "jdk8", version: [ "4.2" ], topology: "standalone", os: "linux" } diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index ea7f9ec6fd2..73015bd6167 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -6,12 +6,12 @@ set -o errexit # Exit the script with error if any of the commands fail # Supported/used environment variables: # AUTH Set to enable authentication. Values are: "auth" / "noauth" (default) # SSL Set to enable SSL. Values are "ssl" / "nossl" (default) -# NETTY_SSL_PROVIDER The Netty TLS/SSL protocol provider. Ignored unless SSL is "ssl" and STREAM_TYPE is "netty". Values are "JDK", "OPENSSL", null (a.k.a. "" or '') (default). +# NETTY_SSL_PROVIDER The Netty TLS/SSL protocol provider. Ignored unless SSL is "ssl" and ASYNC_TRANSPORT is "netty". Values are "JDK", "OPENSSL", null (a.k.a. "" or '') (default). # MONGODB_URI Set the suggested connection MONGODB_URI (including credentials and topology info) # TOPOLOGY Allows you to modify variables and the MONGODB_URI based on test topology # Supported values: "server", "replica_set", "sharded_cluster" # COMPRESSOR Set to enable compression. Values are "snappy" and "zlib" (default is no compression) -# STREAM_TYPE Set the stream type. Values are "nio2" or "netty". Defaults to "nio2". +# ASYNC_TRANSPORT Set the async transport. Values are "nio2" or "netty". # JDK Set the version of java to be used. Java versions can be set from the java toolchain /opt/java # SLOW_TESTS_ONLY Set to true to only run the slow tests # AWS_ACCESS_KEY_ID The AWS access key identifier for client-side encryption @@ -34,13 +34,14 @@ SSL=${SSL:-nossl} MONGODB_URI=${MONGODB_URI:-} TOPOLOGY=${TOPOLOGY:-server} COMPRESSOR=${COMPRESSOR:-} -STREAM_TYPE=${STREAM_TYPE:-nio2} TESTS=${TESTS:-test} SLOW_TESTS_ONLY=${SLOW_TESTS_ONLY:-false} -export ASYNC_TYPE="-Dorg.mongodb.test.async.type=${STREAM_TYPE}" +if [ "${ASYNC_TRANSPORT}" != "" ]; then + readonly JAVA_SYSPROP_ASYNC_TRANSPORT="-Dorg.mongodb.test.async.transport=${ASYNC_TRANSPORT}" +fi -if [ "${SSL}" = "ssl" ] && [ "${STREAM_TYPE}" = "netty" ] && [ "${NETTY_SSL_PROVIDER}" != "" ]; then +if [ "${SSL}" = "ssl" ] && [ "${ASYNC_TRANSPORT}" = "netty" ] && [ "${NETTY_SSL_PROVIDER}" != "" ]; then readonly JAVA_SYSPROP_NETTY_SSL_PROVIDER="-Dorg.mongodb.test.netty.ssl.provider=${NETTY_SSL_PROVIDER}" fi @@ -128,7 +129,7 @@ echo "Running tests with Java ${JAVA_VERSION}" ./gradlew -version ./gradlew -PjavaVersion=${JAVA_VERSION} -Dorg.mongodb.test.uri=${MONGODB_URI} \ - ${MULTI_MONGOS_URI_SYSTEM_PROPERTY} ${API_VERSION} ${GRADLE_EXTRA_VARS} ${ASYNC_TYPE} \ - ${JAVA_SYSPROP_NETTY_SSL_PROVIDER} \ + ${MULTI_MONGOS_URI_SYSTEM_PROPERTY} ${API_VERSION} ${GRADLE_EXTRA_VARS} \ + ${JAVA_SYSPROP_ASYNC_TRANSPORT} ${JAVA_SYSPROP_NETTY_SSL_PROVIDER} \ -Dorg.mongodb.test.fle.on.demand.credential.test.failure.enabled=true \ --stacktrace --info --continue ${TESTS} diff --git a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java index f0004cd9e03..a1c778d2747 100644 --- a/driver-core/src/test/functional/com/mongodb/ClusterFixture.java +++ b/driver-core/src/test/functional/com/mongodb/ClusterFixture.java @@ -520,9 +520,9 @@ public static StreamFactory getAsyncStreamFactory() { @Nullable public static TransportSettings getOverriddenTransportSettings() { - String streamType = System.getProperty("org.mongodb.test.async.type", "nio2"); + String asyncTransport = System.getProperty("org.mongodb.test.async.transport", "nio2"); - if (nettyTransportSettings == null && streamType.equals("netty")) { + if (nettyTransportSettings == null && asyncTransport.equals("netty")) { NettyTransportSettings.Builder builder = TransportSettings.nettyBuilder(); String sslProvider = System.getProperty("org.mongodb.test.netty.ssl.provider"); if (sslProvider != null) { diff --git a/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/ClientSideOperationTimeoutTest.java b/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/ClientSideOperationTimeoutTest.java index c6d9c13964f..b00b8c365cb 100644 --- a/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/ClientSideOperationTimeoutTest.java +++ b/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/ClientSideOperationTimeoutTest.java @@ -16,13 +16,7 @@ package com.mongodb.reactivestreams.client.unified; -import com.mongodb.ClusterFixture; -import com.mongodb.MongoClientSettings; -import com.mongodb.client.MongoClient; -import com.mongodb.connection.TransportSettings; import com.mongodb.lang.Nullable; -import com.mongodb.reactivestreams.client.MongoClients; -import com.mongodb.reactivestreams.client.syncadapter.SyncMongoClient; import org.bson.BsonArray; import org.bson.BsonDocument; import org.junit.jupiter.api.AfterEach; @@ -138,13 +132,6 @@ public void shouldPassAllOutcomes( } assertNoDroppedError(format("%s passed but there was a dropped error; `onError` called with no handler.", testDescription)); } - @Override - protected MongoClient createMongoClient(final MongoClientSettings settings) { - TransportSettings overriddenTransportSettings = ClusterFixture.getOverriddenTransportSettings(); - MongoClientSettings clientSettings = overriddenTransportSettings == null ? settings - : MongoClientSettings.builder(settings).transportSettings(overriddenTransportSettings).build(); - return new SyncMongoClient(MongoClients.create(clientSettings)); - } @AfterEach public void cleanUp() { diff --git a/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedReactiveStreamsTest.java b/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedReactiveStreamsTest.java index 640d88964ce..47a1209790e 100644 --- a/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedReactiveStreamsTest.java +++ b/driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedReactiveStreamsTest.java @@ -24,6 +24,7 @@ import com.mongodb.client.unified.UnifiedTest; import com.mongodb.client.unified.UnifiedTestModifications; import com.mongodb.client.vault.ClientEncryption; +import com.mongodb.connection.TransportSettings; import com.mongodb.lang.NonNull; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.gridfs.GridFSBuckets; @@ -36,6 +37,7 @@ import java.util.Collection; +import static com.mongodb.ClusterFixture.getOverriddenTransportSettings; import static com.mongodb.client.unified.UnifiedTestModifications.Modifier; import static com.mongodb.client.unified.UnifiedTestModifications.TestDef; import static com.mongodb.reactivestreams.client.syncadapter.SyncMongoClient.disableSleep; @@ -50,7 +52,10 @@ protected UnifiedReactiveStreamsTest() { @Override protected MongoClient createMongoClient(final MongoClientSettings settings) { - return new SyncMongoClient(MongoClients.create(settings)); + TransportSettings overriddenTransportSettings = getOverriddenTransportSettings(); + MongoClientSettings clientSettings = overriddenTransportSettings == null ? settings + : MongoClientSettings.builder(settings).transportSettings(overriddenTransportSettings).build(); + return new SyncMongoClient(MongoClients.create(clientSettings)); } @Override From 50313f2c25d08a9b8efffb61c53f460829ff7e3c Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Tue, 17 Jun 2025 12:03:18 -0400 Subject: [PATCH 2/4] Apply suggestions from code review Co-authored-by: Ross Lawley --- .evergreen/.evg.yml | 6 +++--- .evergreen/run-tests.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/.evg.yml b/.evergreen/.evg.yml index 6ef6e3a307a..8632ac5706d 100644 --- a/.evergreen/.evg.yml +++ b/.evergreen/.evg.yml @@ -1834,7 +1834,7 @@ axes: variables: SSL: "nossl" - - id: async_transport + - id: "async-transport" display_name: Async Transport values: - id: "netty" @@ -2460,7 +2460,7 @@ buildvariants: - matrix_name: "tests-netty" matrix_spec: { auth: "noauth", ssl: "*", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux", - async_transport: "netty" } + async-transport: "netty" } display_name: "Netty: ${version} ${topology} ${ssl} ${auth} ${jdk} ${os} " tags: [ "tests-netty-variant" ] tasks: @@ -2469,7 +2469,7 @@ buildvariants: - matrix_name: "tests-netty-ssl-provider" matrix_spec: { auth: "auth", ssl: "ssl", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux", - async_transport: "netty", netty-ssl-provider: "*" } + async-transport: "netty", netty-ssl-provider: "*" } display_name: "Netty SSL provider: ${version} ${topology} ${ssl} SslProvider.${netty-ssl-provider} ${auth} ${jdk} ${os} " tags: [ "tests-netty-variant" ] tasks: diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 73015bd6167..32204d604db 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -37,7 +37,7 @@ COMPRESSOR=${COMPRESSOR:-} TESTS=${TESTS:-test} SLOW_TESTS_ONLY=${SLOW_TESTS_ONLY:-false} -if [ "${ASYNC_TRANSPORT}" != "" ]; then +if [ -n "${ASYNC_TRANSPORT}"]; then readonly JAVA_SYSPROP_ASYNC_TRANSPORT="-Dorg.mongodb.test.async.transport=${ASYNC_TRANSPORT}" fi From 5a38a39aabe987bda70cd935edbfd67574381fe1 Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Tue, 17 Jun 2025 12:08:22 -0400 Subject: [PATCH 3/4] Update task names --- .evergreen/.evg.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/.evg.yml b/.evergreen/.evg.yml index 8632ac5706d..846c89595a8 100644 --- a/.evergreen/.evg.yml +++ b/.evergreen/.evg.yml @@ -2464,8 +2464,8 @@ buildvariants: display_name: "Netty: ${version} ${topology} ${ssl} ${auth} ${jdk} ${os} " tags: [ "tests-netty-variant" ] tasks: - - name: "test-reactive" - - name: "test-core" + - name: "test-reactive-task" + - name: "test-core-task" - matrix_name: "tests-netty-ssl-provider" matrix_spec: { auth: "auth", ssl: "ssl", jdk: "jdk8", version: [ "7.0" ], topology: "replicaset", os: "linux", @@ -2473,8 +2473,8 @@ buildvariants: display_name: "Netty SSL provider: ${version} ${topology} ${ssl} SslProvider.${netty-ssl-provider} ${auth} ${jdk} ${os} " tags: [ "tests-netty-variant" ] tasks: - - name: "test-reactive" - - name: "test-core" + - name: "test-reactive-task" + - name: "test-core-task" - matrix_name: "tests-socket-snappy-compression" matrix_spec: { compressor: "snappy", auth: "noauth", ssl: "nossl", jdk: "jdk8", version: [ "4.2" ], topology: "standalone", os: "linux" } From e2e909f470f5e4c15010ce37d45e095d13da899d Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Tue, 17 Jun 2025 14:40:19 -0400 Subject: [PATCH 4/4] * Use -n consistently in run-tests.sh * Add space between '"' and ']''. Otherwise, it silently fails --- .evergreen/run-tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 32204d604db..6633f7cb2c6 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -37,11 +37,11 @@ COMPRESSOR=${COMPRESSOR:-} TESTS=${TESTS:-test} SLOW_TESTS_ONLY=${SLOW_TESTS_ONLY:-false} -if [ -n "${ASYNC_TRANSPORT}"]; then +if [ -n "${ASYNC_TRANSPORT}" ]; then readonly JAVA_SYSPROP_ASYNC_TRANSPORT="-Dorg.mongodb.test.async.transport=${ASYNC_TRANSPORT}" fi -if [ "${SSL}" = "ssl" ] && [ "${ASYNC_TRANSPORT}" = "netty" ] && [ "${NETTY_SSL_PROVIDER}" != "" ]; then +if [ "${SSL}" = "ssl" ] && [ "${ASYNC_TRANSPORT}" = "netty" ] && [ -n "${NETTY_SSL_PROVIDER}" ]; then readonly JAVA_SYSPROP_NETTY_SSL_PROVIDER="-Dorg.mongodb.test.netty.ssl.provider=${NETTY_SSL_PROVIDER}" fi