diff --git a/.evergreen/.evg.yml b/.evergreen/.evg.yml index e3bf87d49d..ca29c86251 100644 --- a/.evergreen/.evg.yml +++ b/.evergreen/.evg.yml @@ -243,6 +243,17 @@ functions: ${PREPARE_SHELL} ${DRIVERS_TOOLS}/.evergreen/secrets_handling/setup-secrets.sh drivers/atlas_connect + "add-atlas-qa-variables-to-file": + - command: shell.exec + type: "test" + params: + include_expansions_in_env: [ "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN" ] + shell: "bash" + working_dir: "src" + script: | + ${PREPARE_SHELL} + ${DRIVERS_TOOLS}/.evergreen/secrets_handling/setup-secrets.sh drivers/atlas-qa + "start-csfle-servers": - command: ec2.assume_role params: @@ -1471,27 +1482,28 @@ tasks: - name: "atlas-search-task" commands: + - func: "assume-aws-test-secrets-role" + - func: "add-atlas-qa-variables-to-file" - command: shell.exec type: "test" params: working_dir: "src" script: | ${PREPARE_SHELL} - MONGODB_URI="${atlas_search_uri}" .evergreen/run-atlas-search-tests.sh + .evergreen/run-atlas-search-tests.sh - name: "atlas-connectivity-task" commands: + - func: "assume-aws-test-secrets-role" + - func: "add-atlas-connect-variables-to-file" - command: shell.exec type: "test" params: silent: true working_dir: "src" script: | - # DO NOT ECHO WITH XTRACE (which PREPARE_SHELL does) - # The connection strings are pipe-delimited - MONGODB_URIS="${atlas_free_tier_uri}|${atlas_replica_set_uri}|${atlas_sharded_uri}|${atlas_tls_v11_uri}|${atlas_tls_v12_uri}|${atlas_free_tier_uri_srv}|${atlas_replica_set_uri_srv}|${atlas_sharded_uri_srv}|${atlas_tls_v11_uri_srv}|${atlas_tls_v12_uri_srv}" \ - JAVA_VERSION="8" \ - .evergreen/run-connectivity-tests.sh + ${PREPARE_SHELL} + .evergreen/run-atlas-connectivity-tests.sh - name: "atlas-search-index-management-task" commands: diff --git a/.evergreen/run-connectivity-tests.sh b/.evergreen/run-atlas-connectivity-tests.sh similarity index 83% rename from .evergreen/run-connectivity-tests.sh rename to .evergreen/run-atlas-connectivity-tests.sh index 38ccfaaf76..53eb4605f0 100755 --- a/.evergreen/run-connectivity-tests.sh +++ b/.evergreen/run-atlas-connectivity-tests.sh @@ -12,11 +12,14 @@ set -o errexit ############################################ # Main Program # ############################################ +JAVA_VERSION=8 RELATIVE_DIR_PATH="$(dirname "${BASH_SOURCE:-$0}")" . "${RELATIVE_DIR_PATH}/setup-env.bash" echo "Running connectivity tests with Java ${JAVA_VERSION}" +MONGODB_URIS="${ATLAS_FREE}|${ATLAS_REPL}|${ATLAS_SHRD}|${ATLAS_TLS11}|${ATLAS_TLS12}|${ATLAS_SRV_FREE}|${ATLAS_SRV_REPL}|${ATLAS_SRV_SHRD}|${ATLAS_SRV_TLS11}|${ATLAS_SRV_TLS12}" + ./gradlew -PjavaVersion=${JAVA_VERSION} -Dorg.mongodb.test.connectivity.uris="${MONGODB_URIS}" --info --continue \ driver-sync:test --tests ConnectivityTest \ driver-legacy:test --tests ConnectivityTest \ diff --git a/.evergreen/run-atlas-search-tests.sh b/.evergreen/run-atlas-search-tests.sh index 01f6bc78b4..4bc975a4c3 100755 --- a/.evergreen/run-atlas-search-tests.sh +++ b/.evergreen/run-atlas-search-tests.sh @@ -12,10 +12,11 @@ RELATIVE_DIR_PATH="$(dirname "${BASH_SOURCE[0]:-$0}")" source "${RELATIVE_DIR_PATH}/setup-env.bash" echo "Running Atlas Search tests" + ./gradlew -version ./gradlew --stacktrace --info \ -Dorg.mongodb.test.atlas.search=true \ - -Dorg.mongodb.test.uri=${MONGODB_URI} \ + -Dorg.mongodb.test.uri=${ATLAS_SEARCH_URI} \ driver-core:test --tests AggregatesSearchIntegrationTest \ --tests AggregatesBinaryVectorSearchIntegrationTest \ --tests AggregatesSearchTest \ diff --git a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesBinaryVectorSearchIntegrationTest.java b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesBinaryVectorSearchIntegrationTest.java index a242367992..4eab978f51 100644 --- a/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesBinaryVectorSearchIntegrationTest.java +++ b/driver-core/src/test/functional/com/mongodb/client/model/search/AggregatesBinaryVectorSearchIntegrationTest.java @@ -16,18 +16,13 @@ package com.mongodb.client.model.search; -import com.mongodb.MongoInterruptedException; import com.mongodb.MongoNamespace; import com.mongodb.client.model.Aggregates; -import com.mongodb.client.model.SearchIndexType; import com.mongodb.client.test.CollectionHelper; -import com.mongodb.internal.operation.SearchIndexRequest; import org.bson.BinaryVector; -import org.bson.BsonDocument; import org.bson.Document; import org.bson.codecs.DocumentCodec; import org.bson.conversions.Bson; -import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.params.ParameterizedTest; @@ -35,8 +30,6 @@ import org.junit.jupiter.params.provider.MethodSource; import java.util.List; -import java.util.Optional; -import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.stream.Stream; @@ -57,7 +50,6 @@ import static com.mongodb.client.model.search.SearchPath.fieldPath; import static com.mongodb.client.model.search.VectorSearchOptions.approximateVectorSearchOptions; import static com.mongodb.client.model.search.VectorSearchOptions.exactVectorSearchOptions; -import static java.lang.String.format; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertAll; @@ -67,127 +59,73 @@ import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.junit.jupiter.params.provider.Arguments.arguments; -class AggregatesBinaryVectorSearchIntegrationTest { - private static final String EXCEED_WAIT_ATTEMPTS_ERROR_MESSAGE = - "Exceeded maximum attempts waiting for Search Index creation in Atlas cluster. Index document: %s"; +/** + * This test runs on an atlas qa cluster in the `javaExtraTests.binaryVectorTests` namespace. + * With readOnly user permissions. + *
+ * With the following index:
+ *
+ * {
+ * "name": "vector_search_index", "type": "vectorSearch",
+ * "definition": {"fields": [
+ * {"path": "int8Vector", "numDimensions": 5, "similarity": "cosine", "type": "vector"},
+ * {"path": "float32Vector", "numDimensions": 5, "similarity": "cosine", "type": "vector"},
+ * {"path": "legacyDoubleVector", "numDimensions": 5, "similarity": "cosine", "type": "vector"},
+ * {"path": "year", "type": "filter"}]}
+ * }
+ *
+ *
+ * And the following test data:
+ *
+ * [{"_id":0, "int8Vector":{"$binary":{"base64":"AwAAAQIDBA==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwAXt9E4Ns2PPwgDD0B1H1ZA8Z2OQA==", "subType":"09"}},
+ * "legacyDoubleVector":[0.0001,1.12345,2.23456,3.34567,4.45678], "year":2016},
+ * {"_id":1, "int8Vector":{"$binary":{"base64":"AwABAgMEBQ==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwBHA4A/m+YHQAgDT0C7D4tA8Z2uQA==", "subType":"09"}},
+ * "legacyDoubleVector":[1.0001,2.12345,3.23456,4.34567,5.45678], "year":2017},
+ * {"_id":2, "int8Vector":{"$binary":{"base64":"AwACAwQFBg==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwBHAwBAm+ZHQISBh0C7D6tA8Z3OQA==", "subType":"09"}},
+ * "legacyDoubleVector":[2.0002,3.12345,4.23456,5.34567,6.45678], "year":2018}},
+ * {"_id":3, "int8Vector":{"$binary":{"base64":"AwADBAUGBw==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwDqBEBATfODQISBp0C7D8tA8Z3uQA==", "subType":"09"}},
+ * "legacyDoubleVector":[3.0003,4.12345,5.23456,6.34567,7.45678], "year":2019}},
+ * {"_id":4, "int8Vector":{"$binary":{"base64":"AwAEBQYHCA==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwBHA4BATfOjQISBx0C7D+tA+U4HQQ==", "subType":"09"}},
+ * "legacyDoubleVector":[4.0004,5.12345,6.23456,7.34567,8.45678], "year":2020}},
+ * {"_id":5, "int8Vector":{"$binary":{"base64":"AwAFBgcICQ==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwAZBKBATfPDQISB50DdhwVB+U4XQQ==", "subType":"09"}},
+ * "legacyDoubleVector":[5.0005,6.12345,7.23456,8.34567,9.45678], "year":2021}},
+ * {"_id":6, "int8Vector":{"$binary":{"base64":"AwAGBwgJCg==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwDqBMBATfPjQMLAA0HdhxVB+U4nQQ==", "subType":"09"}},
+ * "legacyDoubleVector":[6.0006,7.12345,8.23456,9.34567,10.45678], "year":2022}},
+ * {"_id":7, "int8Vector":{"$binary":{"base64":"AwAHCAkKCw==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwC8BeBAp/kBQcLAE0HdhyVB+U43QQ==", "subType":"09"}},
+ * "legacyDoubleVector":[7.0007,8.12345,9.23456,10.34567,11.45678], "year":2023}},
+ * {"_id":8, "int8Vector":{"$binary":{"base64":"AwAICQoLDA==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwBHAwBBp/kRQcLAI0HdhzVB+U5HQQ==", "subType":"09"}},
+ * "legacyDoubleVector":[8.0008,9.12345,10.23456,11.34567,12.45678], "year":2024}},
+ * {"_id":9, "int8Vector":{"$binary":{"base64":"AwAJCgsMDQ==", "subType":"09"}},
+ * "float32Vector":{"$binary":{"base64":"JwCwAxBBp/khQcLAM0Hdh0VB+U5XQQ==", "subType":"09"}},
+ * "legacyDoubleVector":[9.0009,10.12345,11.23456,12.34567,13.45678], "year":2025}]
+ *
+ */
+class AggregatesBinaryVectorSearchIntegrationTest {
+ private static final MongoNamespace BINARY_VECTOR_NAMESPACE = new MongoNamespace("javaExtraTests", "binaryVectorTests");
private static final String VECTOR_INDEX = "vector_search_index";
private static final String VECTOR_FIELD_INT_8 = "int8Vector";
private static final String VECTOR_FIELD_FLOAT_32 = "float32Vector";
private static final String VECTOR_FIELD_LEGACY_DOUBLE_LIST = "legacyDoubleVector";
private static final int LIMIT = 5;
- private static final String FIELD_YEAR = "year";
private static CollectionHelper