mongo 2.19.1 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +40 -1
- data/Rakefile +83 -174
- data/lib/mongo/address.rb +22 -3
- data/lib/mongo/auth/aws/credentials_retriever.rb +70 -17
- data/lib/mongo/auth/base.rb +1 -1
- data/lib/mongo/bulk_write.rb +35 -2
- data/lib/mongo/client.rb +38 -6
- data/lib/mongo/client_encryption.rb +6 -3
- data/lib/mongo/cluster/reapers/cursor_reaper.rb +6 -1
- data/lib/mongo/cluster/sdam_flow.rb +20 -7
- data/lib/mongo/cluster/topology/base.rb +16 -0
- data/lib/mongo/cluster.rb +41 -5
- data/lib/mongo/collection/helpers.rb +1 -1
- data/lib/mongo/collection/view/aggregation/behavior.rb +131 -0
- data/lib/mongo/collection/view/aggregation.rb +33 -99
- data/lib/mongo/collection/view/builder/aggregation.rb +1 -7
- data/lib/mongo/collection/view/change_stream.rb +80 -27
- data/lib/mongo/collection/view/iterable.rb +92 -60
- data/lib/mongo/collection/view/map_reduce.rb +25 -8
- data/lib/mongo/collection/view/readable.rb +79 -30
- data/lib/mongo/collection/view/writable.rb +109 -48
- data/lib/mongo/collection/view.rb +44 -3
- data/lib/mongo/collection.rb +185 -26
- data/lib/mongo/config.rb +2 -2
- data/lib/mongo/crypt/auto_encrypter.rb +4 -6
- data/lib/mongo/crypt/binding.rb +4 -4
- data/lib/mongo/crypt/context.rb +20 -14
- data/lib/mongo/crypt/encryption_io.rb +56 -26
- data/lib/mongo/crypt/explicit_encrypter.rb +49 -20
- data/lib/mongo/crypt/explicit_encryption_context.rb +17 -11
- data/lib/mongo/crypt/kms/azure/credentials_retriever.rb +22 -6
- data/lib/mongo/crypt/kms/gcp/credentials_retriever.rb +29 -4
- data/lib/mongo/csot_timeout_holder.rb +119 -0
- data/lib/mongo/cursor/kill_spec.rb +5 -2
- data/lib/mongo/cursor/nontailable.rb +27 -0
- data/lib/mongo/cursor.rb +86 -24
- data/lib/mongo/cursor_host.rb +82 -0
- data/lib/mongo/database/view.rb +81 -14
- data/lib/mongo/database.rb +88 -18
- data/lib/mongo/error/operation_failure.rb +209 -204
- data/lib/mongo/error/server_timeout_error.rb +12 -0
- data/lib/mongo/error/socket_timeout_error.rb +3 -1
- data/lib/mongo/error/timeout_error.rb +23 -0
- data/lib/mongo/error/transactions_not_supported.rb +34 -0
- data/lib/mongo/error.rb +3 -0
- data/lib/mongo/grid/fs_bucket.rb +48 -9
- data/lib/mongo/grid/stream/read.rb +15 -1
- data/lib/mongo/grid/stream/write.rb +21 -4
- data/lib/mongo/index/view.rb +77 -16
- data/lib/mongo/monitoring/event/secure.rb +1 -1
- data/lib/mongo/operation/context.rb +40 -2
- data/lib/mongo/operation/create_search_indexes/op_msg.rb +31 -0
- data/lib/mongo/operation/create_search_indexes.rb +15 -0
- data/lib/mongo/operation/delete/op_msg.rb +2 -1
- data/lib/mongo/operation/drop_search_index/op_msg.rb +33 -0
- data/lib/mongo/operation/drop_search_index.rb +15 -0
- data/lib/mongo/operation/find/op_msg.rb +45 -0
- data/lib/mongo/operation/get_more/op_msg.rb +33 -0
- data/lib/mongo/operation/insert/op_msg.rb +3 -2
- data/lib/mongo/operation/insert/result.rb +4 -2
- data/lib/mongo/operation/list_collections/result.rb +1 -1
- data/lib/mongo/operation/map_reduce/result.rb +1 -1
- data/lib/mongo/operation/op_msg_base.rb +3 -1
- data/lib/mongo/operation/result.rb +26 -5
- data/lib/mongo/operation/shared/executable.rb +55 -28
- data/lib/mongo/operation/shared/op_msg_executable.rb +4 -1
- data/lib/mongo/operation/shared/response_handling.rb +25 -27
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/operation/shared/specifiable.rb +7 -0
- data/lib/mongo/operation/shared/timed.rb +52 -0
- data/lib/mongo/operation/shared/write.rb +4 -1
- data/lib/mongo/operation/update/op_msg.rb +2 -1
- data/lib/mongo/operation/update_search_index/op_msg.rb +34 -0
- data/lib/mongo/operation/update_search_index.rb +15 -0
- data/lib/mongo/operation.rb +4 -0
- data/lib/mongo/protocol/message.rb +1 -4
- data/lib/mongo/protocol/msg.rb +2 -2
- data/lib/mongo/retryable/base_worker.rb +28 -3
- data/lib/mongo/retryable/read_worker.rb +78 -36
- data/lib/mongo/retryable/write_worker.rb +59 -25
- data/lib/mongo/retryable.rb +8 -2
- data/lib/mongo/search_index/view.rb +232 -0
- data/lib/mongo/server/app_metadata/environment.rb +64 -9
- data/lib/mongo/server/app_metadata.rb +5 -4
- data/lib/mongo/server/connection.rb +11 -5
- data/lib/mongo/server/connection_base.rb +22 -2
- data/lib/mongo/server/connection_pool.rb +32 -14
- data/lib/mongo/server/description/features.rb +2 -1
- data/lib/mongo/server/description.rb +18 -5
- data/lib/mongo/server/monitor.rb +7 -4
- data/lib/mongo/server/pending_connection.rb +25 -8
- data/lib/mongo/server/{round_trip_time_averager.rb → round_trip_time_calculator.rb} +25 -7
- data/lib/mongo/server.rb +11 -6
- data/lib/mongo/server_selector/base.rb +54 -12
- data/lib/mongo/session/server_session/dirtyable.rb +52 -0
- data/lib/mongo/session/server_session.rb +3 -0
- data/lib/mongo/session/session_pool.rb +12 -18
- data/lib/mongo/session.rb +110 -9
- data/lib/mongo/socket/ssl.rb +131 -18
- data/lib/mongo/socket/tcp.rb +40 -6
- data/lib/mongo/socket.rb +154 -25
- data/lib/mongo/uri/options_mapper.rb +1 -0
- data/lib/mongo/uri.rb +0 -4
- data/lib/mongo/version.rb +1 -5
- data/lib/mongo.rb +2 -0
- data/mongo.gemspec +9 -18
- data/spec/atlas/atlas_connectivity_spec.rb +9 -9
- data/spec/atlas/operations_spec.rb +5 -5
- data/spec/faas/ruby-sam-app/Gemfile +9 -0
- data/spec/faas/ruby-sam-app/mongodb/Gemfile +4 -0
- data/spec/faas/ruby-sam-app/mongodb/app.rb +149 -0
- data/spec/faas/ruby-sam-app/template.yaml +48 -0
- data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +2 -1
- data/spec/integration/client_side_encryption/auto_encryption_spec.rb +494 -487
- data/spec/integration/client_side_encryption/corpus_spec.rb +10 -2
- data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +1 -1
- data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +67 -20
- data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +131 -0
- data/spec/integration/connection_pool_populator_spec.rb +2 -0
- data/spec/integration/cursor_pinning_spec.rb +15 -60
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/find_options_spec.rb +227 -0
- data/spec/integration/operation_failure_code_spec.rb +1 -1
- data/spec/integration/operation_failure_message_spec.rb +3 -3
- data/spec/integration/retryable_errors_spec.rb +2 -2
- data/spec/integration/retryable_reads_errors_spec.rb +196 -31
- data/spec/integration/retryable_writes_errors_spec.rb +156 -0
- data/spec/integration/sdam_error_handling_spec.rb +4 -1
- data/spec/integration/search_indexes_prose_spec.rb +172 -0
- data/spec/integration/server_spec.rb +4 -3
- data/spec/integration/transactions_api_examples_spec.rb +2 -0
- data/spec/kerberos/kerberos_spec.rb +4 -0
- data/spec/lite_spec_helper.rb +34 -20
- data/spec/mongo/auth/user/view_spec.rb +1 -1
- data/spec/mongo/caching_cursor_spec.rb +1 -1
- data/spec/mongo/client_encryption_spec.rb +1 -0
- data/spec/mongo/client_spec.rb +158 -4
- data/spec/mongo/cluster_spec.rb +36 -0
- data/spec/mongo/collection/view/aggregation_spec.rb +20 -40
- data/spec/mongo/collection/view/change_stream_spec.rb +3 -3
- data/spec/mongo/collection/view/explainable_spec.rb +2 -0
- data/spec/mongo/collection_crud_spec.rb +2 -1
- data/spec/mongo/collection_spec.rb +5 -6
- data/spec/mongo/crypt/auto_encrypter_spec.rb +14 -12
- data/spec/mongo/crypt/data_key_context_spec.rb +3 -1
- data/spec/mongo/crypt/explicit_encryption_context_spec.rb +2 -2
- data/spec/mongo/crypt/handle_spec.rb +1 -1
- data/spec/mongo/cursor_spec.rb +26 -9
- data/spec/mongo/error/operation_failure_heavy_spec.rb +2 -2
- data/spec/mongo/operation/context_spec.rb +79 -0
- data/spec/mongo/operation/create/op_msg_spec.rb +106 -110
- data/spec/mongo/operation/delete/op_msg_spec.rb +6 -5
- data/spec/mongo/operation/find/op_msg_spec.rb +66 -0
- data/spec/mongo/operation/get_more/op_msg_spec.rb +65 -0
- data/spec/mongo/operation/insert/op_msg_spec.rb +128 -131
- data/spec/mongo/operation/insert_spec.rb +1 -1
- data/spec/mongo/operation/shared/csot/examples.rb +113 -0
- data/spec/mongo/query_cache_spec.rb +243 -225
- data/spec/mongo/retryable/write_worker_spec.rb +39 -0
- data/spec/mongo/retryable_spec.rb +1 -0
- data/spec/mongo/server/app_metadata/environment_spec.rb +135 -0
- data/spec/mongo/server/app_metadata_spec.rb +12 -2
- data/spec/mongo/server/connection_spec.rb +26 -0
- data/spec/mongo/server/round_trip_time_calculator_spec.rb +120 -0
- data/spec/mongo/session/session_pool_spec.rb +1 -16
- data/spec/mongo/session_transaction_spec.rb +15 -0
- data/spec/mongo/socket/ssl_spec.rb +0 -10
- data/spec/mongo/uri_spec.rb +0 -9
- data/spec/runners/change_streams/test.rb +2 -2
- data/spec/runners/crud/operation.rb +1 -1
- data/spec/runners/crud/test.rb +0 -8
- data/spec/runners/crud/verifier.rb +3 -1
- data/spec/runners/crud.rb +1 -1
- data/spec/runners/transactions/operation.rb +4 -6
- data/spec/runners/transactions/test.rb +12 -3
- data/spec/runners/unified/ambiguous_operations.rb +13 -0
- data/spec/runners/unified/assertions.rb +20 -3
- data/spec/runners/unified/change_stream_operations.rb +14 -24
- data/spec/runners/unified/crud_operations.rb +82 -47
- data/spec/runners/unified/ddl_operations.rb +38 -7
- data/spec/runners/unified/grid_fs_operations.rb +37 -2
- data/spec/runners/unified/search_index_operations.rb +63 -0
- data/spec/runners/unified/support_operations.rb +46 -9
- data/spec/runners/unified/test.rb +33 -12
- data/spec/runners/unified.rb +1 -1
- data/spec/solo/clean_exit_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/spec_tests/client_side_operations_timeout_spec.rb +15 -0
- data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +3 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +1 -1
- data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +1 -1
- data/spec/spec_tests/data/client_side_encryption/badQueries.yml +2 -1
- data/spec/spec_tests/data/client_side_encryption/explain.yml +2 -2
- data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +1 -0
- data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +2 -1
- data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +67 -0
- data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +87 -0
- data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +358 -0
- data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +129 -0
- data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +250 -0
- data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +113 -0
- data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +70 -0
- data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +3982 -0
- data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +96 -0
- data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +3236 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +207 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +152 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +182 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +100 -0
- data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +249 -0
- data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +204 -0
- data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +307 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +1877 -0
- data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +1918 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +1676 -0
- data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +2824 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +171 -0
- data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +168 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +247 -0
- data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +181 -0
- data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -10
- data/spec/spec_tests/data/connection_string/valid-options.yml +13 -0
- data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +6 -0
- data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +6 -0
- data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +377 -0
- data/spec/spec_tests/data/index_management/createSearchIndex.yml +64 -0
- data/spec/spec_tests/data/index_management/createSearchIndexes.yml +86 -0
- data/spec/spec_tests/data/index_management/dropSearchIndex.yml +43 -0
- data/spec/spec_tests/data/index_management/listSearchIndexes.yml +91 -0
- data/spec/spec_tests/data/index_management/updateSearchIndex.yml +46 -0
- data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +3 -6
- data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +3 -6
- data/spec/spec_tests/data/run_command_unified/runCommand.yml +319 -0
- data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +351 -0
- data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +7 -7
- data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +3 -4
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +1 -1
- data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +3 -3
- data/spec/spec_tests/index_management_unified_spec.rb +13 -0
- data/spec/spec_tests/run_command_unified_spec.rb +13 -0
- data/spec/spec_tests/sdam_unified_spec.rb +2 -0
- data/spec/spec_tests/server_selection_rtt_spec.rb +6 -6
- data/spec/spec_tests/transactions_unified_spec.rb +2 -1
- data/spec/support/certificates/atlas-ocsp-ca.crt +89 -79
- data/spec/support/certificates/atlas-ocsp.crt +117 -122
- data/spec/support/certificates/retrieve-atlas-cert +1 -1
- data/spec/support/cluster_tools.rb +3 -3
- data/spec/support/common_shortcuts.rb +2 -2
- data/spec/support/constraints.rb +6 -0
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +1 -1
- data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +1 -1
- data/spec/support/ocsp +1 -1
- data/spec/support/recording_logger.rb +27 -0
- data/spec/support/shared/session.rb +2 -2
- data/spec/support/spec_config.rb +5 -0
- data/spec/support/spec_setup.rb +2 -2
- data/spec/support/utils.rb +3 -1
- metadata +1329 -1368
- checksums.yaml.gz.sig +0 -0
- data/spec/mongo/server/round_trip_time_averager_spec.rb +0 -48
- data/spec/shared/LICENSE +0 -20
- data/spec/shared/bin/get-mongodb-download-url +0 -17
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
- data/spec/shared/lib/mrss/cluster_config.rb +0 -231
- data/spec/shared/lib/mrss/constraints.rb +0 -378
- data/spec/shared/lib/mrss/docker_runner.rb +0 -295
- data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
- data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
- data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
- data/spec/shared/lib/mrss/session_registry.rb +0 -69
- data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
- data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
- data/spec/shared/lib/mrss/utils.rb +0 -37
- data/spec/shared/share/Dockerfile.erb +0 -330
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/shared/shlib/config.sh +0 -27
- data/spec/shared/shlib/distro.sh +0 -74
- data/spec/shared/shlib/server.sh +0 -416
- data/spec/shared/shlib/set_env.sh +0 -169
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Correctness.yml +0 -422
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Date-Update.yml +0 -252
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Aggregate.yml +0 -1687
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Correctness.yml +0 -293
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Delete.yml +0 -905
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-FindOneAndUpdate.yml +0 -1684
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-InsertFind.yml +0 -1680
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Decimal-Update.yml +0 -1697
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Aggregate.yml +0 -329
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Delete.yml +0 -226
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-FindOneAndUpdate.yml +0 -327
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-InsertFind.yml +0 -319
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DecimalPrecision-Update.yml +0 -336
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Aggregate.yml +0 -913
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Correctness.yml +0 -292
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Delete.yml +0 -518
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-FindOneAndUpdate.yml +0 -911
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-InsertFind.yml +0 -907
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Double-Update.yml +0 -924
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Aggregate.yml +0 -325
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Correctness.yml +0 -424
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Delete.yml +0 -224
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-FindOneAndUpdate.yml +0 -323
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-InsertFind.yml +0 -319
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-DoublePrecision-Update.yml +0 -338
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Correctness.yml +0 -423
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Int-Update.yml +0 -254
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Aggregate.yml +0 -241
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Correctness.yml +0 -422
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Delete.yml +0 -182
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-FindOneAndUpdate.yml +0 -239
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-InsertFind.yml +0 -235
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-Long-Update.yml +0 -254
- data/spec/spec_tests/data/client_side_encryption/fle2v2-Range-WrongType.yml +0 -43
- data/spec/spec_tests/data/cmap/pool-clear-interrupt-immediately.yml +0 -49
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -2
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# rubocop:todo all
|
|
3
3
|
|
|
4
4
|
require 'runners/crud/requirement'
|
|
5
|
+
require 'runners/unified/ambiguous_operations'
|
|
5
6
|
require 'runners/unified/client_side_encryption_operations'
|
|
6
7
|
require 'runners/unified/crud_operations'
|
|
7
8
|
require 'runners/unified/grid_fs_operations'
|
|
@@ -9,6 +10,7 @@ require 'runners/unified/ddl_operations'
|
|
|
9
10
|
require 'runners/unified/change_stream_operations'
|
|
10
11
|
require 'runners/unified/support_operations'
|
|
11
12
|
require 'runners/unified/thread_operations'
|
|
13
|
+
require 'runners/unified/search_index_operations'
|
|
12
14
|
require 'runners/unified/assertions'
|
|
13
15
|
require 'support/utils'
|
|
14
16
|
require 'support/crypt'
|
|
@@ -16,6 +18,7 @@ require 'support/crypt'
|
|
|
16
18
|
module Unified
|
|
17
19
|
|
|
18
20
|
class Test
|
|
21
|
+
include AmbiguousOperations
|
|
19
22
|
include ClientSideEncryptionOperations
|
|
20
23
|
include CrudOperations
|
|
21
24
|
include GridFsOperations
|
|
@@ -23,6 +26,7 @@ module Unified
|
|
|
23
26
|
include ChangeStreamOperations
|
|
24
27
|
include SupportOperations
|
|
25
28
|
include ThreadOperations
|
|
29
|
+
include SearchIndexOperations
|
|
26
30
|
include Assertions
|
|
27
31
|
include RSpec::Core::Pending
|
|
28
32
|
|
|
@@ -40,12 +44,14 @@ module Unified
|
|
|
40
44
|
if req = @spec['group_runOnRequirements']
|
|
41
45
|
@group_reqs = req.map { |r| Mongo::CRUD::Requirement.new(r) }
|
|
42
46
|
end
|
|
43
|
-
|
|
44
|
-
spec['
|
|
45
|
-
|
|
46
|
-
spec
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
if @spec['createEntities']
|
|
48
|
+
mongoses = @spec['createEntities'].select do |spec|
|
|
49
|
+
spec['client']
|
|
50
|
+
end.map do |spec|
|
|
51
|
+
spec['client']['useMultipleMongoses']
|
|
52
|
+
end.compact.uniq
|
|
53
|
+
@multiple_mongoses = mongoses.any? { |v| v }
|
|
54
|
+
end
|
|
49
55
|
@test_spec.freeze
|
|
50
56
|
@subscribers = {}
|
|
51
57
|
@observe_sensitive = {}
|
|
@@ -83,6 +89,8 @@ module Unified
|
|
|
83
89
|
end
|
|
84
90
|
|
|
85
91
|
def generate_entities(es)
|
|
92
|
+
return if es.nil?
|
|
93
|
+
|
|
86
94
|
es.each do |entity_spec|
|
|
87
95
|
unless entity_spec.keys.length == 1
|
|
88
96
|
raise NotImplementedError, "Entity must have exactly one key"
|
|
@@ -120,7 +128,7 @@ module Unified
|
|
|
120
128
|
# the other set members, in standalone deployments because
|
|
121
129
|
# there is only one server, but changes behavior in
|
|
122
130
|
# sharded clusters compared to how the test suite is configured.
|
|
123
|
-
|
|
131
|
+
options[:single_address] = true
|
|
124
132
|
end
|
|
125
133
|
|
|
126
134
|
if store_events = spec.use('storeEventsAsEntities')
|
|
@@ -225,7 +233,9 @@ module Unified
|
|
|
225
233
|
opts = {}
|
|
226
234
|
end
|
|
227
235
|
|
|
228
|
-
client.start_session(**opts)
|
|
236
|
+
client.start_session(**opts).tap do |session|
|
|
237
|
+
session.advance_cluster_time(@cluster_time)
|
|
238
|
+
end
|
|
229
239
|
when 'clientEncryption'
|
|
230
240
|
client_encryption_opts = spec.use!('clientEncryptionOpts')
|
|
231
241
|
key_vault_client = entities.get(:client, client_encryption_opts['keyVaultClient'])
|
|
@@ -325,7 +335,7 @@ module Unified
|
|
|
325
335
|
begin
|
|
326
336
|
collection.create(create_options)
|
|
327
337
|
rescue Mongo::Error => e
|
|
328
|
-
if Mongo::Error::OperationFailure === e && (
|
|
338
|
+
if Mongo::Error::OperationFailure::Family === e && (
|
|
329
339
|
e.code == 48 || e.message =~ /collection already exists/
|
|
330
340
|
)
|
|
331
341
|
# Already exists
|
|
@@ -340,6 +350,11 @@ module Unified
|
|
|
340
350
|
raise NotImplementedError, "Unhandled spec keys: #{spec}"
|
|
341
351
|
end
|
|
342
352
|
end
|
|
353
|
+
|
|
354
|
+
# the cluster time is used to advance the cluster time of any
|
|
355
|
+
# sessions created during this test.
|
|
356
|
+
# -> see DRIVERS-2816
|
|
357
|
+
@cluster_time = root_authorized_client.command(ping: 1).cluster_time
|
|
343
358
|
end
|
|
344
359
|
|
|
345
360
|
def run
|
|
@@ -402,10 +417,16 @@ module Unified
|
|
|
402
417
|
|
|
403
418
|
public_send(method_name, op)
|
|
404
419
|
rescue Mongo::Error, bson_error, Mongo::Auth::Unauthorized, ArgumentError => e
|
|
420
|
+
if expected_error.use('isTimeoutError')
|
|
421
|
+
unless Mongo::Error::TimeoutError === e
|
|
422
|
+
raise e
|
|
423
|
+
raise Error::ErrorMismatch, %Q,Expected TimeoutError ("isTimeoutError") but got #{e},
|
|
424
|
+
end
|
|
425
|
+
end
|
|
405
426
|
if expected_error.use('isClientError')
|
|
406
427
|
# isClientError doesn't actually mean a client error.
|
|
407
428
|
# It means anything other than OperationFailure. DRIVERS-1799
|
|
408
|
-
if Mongo::Error::OperationFailure === e
|
|
429
|
+
if Mongo::Error::OperationFailure::Family === e
|
|
409
430
|
raise Error::ErrorMismatch, %Q,Expected not OperationFailure ("isClientError") but got #{e},
|
|
410
431
|
end
|
|
411
432
|
end
|
|
@@ -473,7 +494,7 @@ module Unified
|
|
|
473
494
|
if result.nil? && expected_result.keys == ["$$unsetOrMatches"]
|
|
474
495
|
return
|
|
475
496
|
elsif result.nil? && !expected_result.empty?
|
|
476
|
-
raise Error::ResultMismatch, "
|
|
497
|
+
raise Error::ResultMismatch, "expected #{expected_result} but got nil"
|
|
477
498
|
elsif Array === expected_result
|
|
478
499
|
assert_documents_match(result, expected_result)
|
|
479
500
|
else
|
|
@@ -527,7 +548,7 @@ module Unified
|
|
|
527
548
|
root_authorized_client.command(
|
|
528
549
|
killAllSessions: [],
|
|
529
550
|
)
|
|
530
|
-
rescue Mongo::Error::OperationFailure => e
|
|
551
|
+
rescue Mongo::Error::OperationFailure::Family => e
|
|
531
552
|
if e.code == 11601
|
|
532
553
|
# operation was interrupted, ignore. SERVER-38335
|
|
533
554
|
elsif e.code == 13
|
data/spec/runners/unified.rb
CHANGED
|
@@ -72,7 +72,7 @@ def define_unified_spec_tests(base_path, paths, expect_failure: false)
|
|
|
72
72
|
test.assert_events
|
|
73
73
|
# HACK: other errors are possible and likely will need to
|
|
74
74
|
# be added here later as the tests evolve.
|
|
75
|
-
rescue Mongo::Error::OperationFailure, Unified::Error::UnsupportedOperation, UsingHash::UsingHashKeyError, Unified::Error::EntityMissing
|
|
75
|
+
rescue Mongo::Error::OperationFailure::Family, Unified::Error::UnsupportedOperation, UsingHash::UsingHashKeyError, Unified::Error::EntityMissing
|
|
76
76
|
rescue => e
|
|
77
77
|
fail "Expected to raise Mongo::Error::OperationFailure or Unified::Error::UnsupportedOperation or UsingHash::UsingHashKeyError or Unified::Error::EntityMissing, got #{e.class}: #{e}"
|
|
78
78
|
else
|
data/spec/spec_helper.rb
CHANGED
|
@@ -20,7 +20,7 @@ RSpec.configure do |config|
|
|
|
20
20
|
config.extend(Constraints)
|
|
21
21
|
|
|
22
22
|
config.before(:all) do
|
|
23
|
-
if
|
|
23
|
+
if SpecConfig.instance.kill_all_server_sessions?
|
|
24
24
|
kill_all_server_sessions
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'runners/unified'
|
|
5
|
+
|
|
6
|
+
base = "#{CURRENT_PATH}/spec_tests/data/client_side_operations_timeout"
|
|
7
|
+
CSOT_TESTS = Dir.glob("#{base}/**/*.yml").sort
|
|
8
|
+
|
|
9
|
+
describe 'CSOT unified spec tests' do
|
|
10
|
+
if [ 1, '1', 'yes', 'true' ].include?(ENV['CSOT_SPEC_TESTS'])
|
|
11
|
+
define_unified_spec_tests(base, CSOT_TESTS)
|
|
12
|
+
else
|
|
13
|
+
skip 'CSOT spec tests are disabled. To enable them set env variable CSOT_SPEC_TESTS to 1'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -15,7 +15,9 @@ createEntities:
|
|
|
15
15
|
|
|
16
16
|
runOnRequirements:
|
|
17
17
|
- minServerVersion: "4.0.0"
|
|
18
|
-
|
|
18
|
+
# TODO(DRIVERS-2323): Run all possible tests against sharded clusters once we know the
|
|
19
|
+
# cause of unexpected command monitoring events.
|
|
20
|
+
topologies: [ replicaset ]
|
|
19
21
|
serverless: forbid
|
|
20
22
|
|
|
21
23
|
initialData:
|
|
@@ -15,7 +15,9 @@ createEntities:
|
|
|
15
15
|
|
|
16
16
|
runOnRequirements:
|
|
17
17
|
- minServerVersion: "6.1.0"
|
|
18
|
-
|
|
18
|
+
# TODO(DRIVERS-2323): Run all possible tests against sharded clusters once we know the
|
|
19
|
+
# cause of unexpected command monitoring events.
|
|
20
|
+
topologies: [ replicaset ]
|
|
19
21
|
serverless: forbid
|
|
20
22
|
|
|
21
23
|
initialData:
|
|
@@ -3,7 +3,9 @@ description: "change-streams-errors"
|
|
|
3
3
|
schemaVersion: "1.7"
|
|
4
4
|
|
|
5
5
|
runOnRequirements:
|
|
6
|
-
|
|
6
|
+
# TODO(DRIVERS-2323): Run all possible tests against sharded clusters once we know the
|
|
7
|
+
# cause of unexpected command monitoring events.
|
|
8
|
+
- topologies: [ replicaset ]
|
|
7
9
|
|
|
8
10
|
createEntities:
|
|
9
11
|
- client:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
runOn:
|
|
2
2
|
- minServerVersion: "4.1.10"
|
|
3
|
+
topology: [ "replicaset", "sharded" ]
|
|
3
4
|
database_name: &database_name "default"
|
|
4
5
|
collection_name: &collection_name "default"
|
|
5
6
|
|
|
@@ -533,4 +534,4 @@ tests:
|
|
|
533
534
|
filter: {}
|
|
534
535
|
fieldName: "encrypted_w_altname"
|
|
535
536
|
result:
|
|
536
|
-
errorContains: "The distinct key is not allowed to be marked for encryption with a non-UUID keyId"
|
|
537
|
+
errorContains: "The distinct key is not allowed to be marked for encryption with a non-UUID keyId"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
runOn:
|
|
2
|
-
- minServerVersion: "
|
|
2
|
+
- minServerVersion: "7.0.0"
|
|
3
3
|
database_name: &database_name "default"
|
|
4
4
|
collection_name: &collection_name "default"
|
|
5
5
|
|
|
@@ -54,4 +54,4 @@ tests:
|
|
|
54
54
|
# Outcome is checked using a separate MongoClient without auto encryption.
|
|
55
55
|
data:
|
|
56
56
|
- *doc0_encrypted
|
|
57
|
-
- *doc1_encrypted
|
|
57
|
+
- *doc1_encrypted
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Requires libmongocrypt 1.8.0.
|
|
2
2
|
runOn:
|
|
3
3
|
- minServerVersion: "7.0.0"
|
|
4
|
+
maxServerVersion: "7.99.99"
|
|
4
5
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
5
6
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
6
7
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
runOn:
|
|
3
3
|
# Require server version 6.0.0 to get behavior added in SERVER-64911.
|
|
4
4
|
- minServerVersion: "7.0.0"
|
|
5
|
+
maxServerVersion: "7.99.99"
|
|
5
6
|
# Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
|
|
6
7
|
# FLE 2 Encrypted collections are not supported on standalone.
|
|
7
8
|
topology: [ "replicaset", "sharded", "load-balanced" ]
|
|
@@ -166,4 +167,4 @@ tests:
|
|
|
166
167
|
partialFilterExpression:
|
|
167
168
|
encryptedIndexed: "foo"
|
|
168
169
|
result:
|
|
169
|
-
errorContains: "Comparison to encrypted fields not supported"
|
|
170
|
+
errorContains: "Comparison to encrypted fields not supported"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
runOn:
|
|
2
|
+
- minServerVersion: "4.4"
|
|
3
|
+
database_name: &database_name "cse-timeouts-db"
|
|
4
|
+
collection_name: &collection_name "cse-timeouts-coll"
|
|
5
|
+
|
|
6
|
+
data: []
|
|
7
|
+
json_schema: {'properties': {'encrypted_w_altname': {'encrypt': {'keyId': '/altname', 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}, 'encrypted_string': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'random': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}, 'encrypted_string_equivalent': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'}
|
|
8
|
+
key_vault_data: [{'status': 1, '_id': {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}, 'masterKey': {'provider': 'aws', 'key': 'arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0', 'region': 'us-east-1'}, 'updateDate': {'$date': {'$numberLong': '1552949630483'}}, 'keyMaterial': {'$binary': {'base64': 'AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gEqnsxXlR51T5EbEVezUqqKAAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDHa4jo6yp0Z18KgbUgIBEIB74sKxWtV8/YHje5lv5THTl0HIbhSwM6EqRlmBiFFatmEWaeMk4tO4xBX65eq670I5TWPSLMzpp8ncGHMmvHqRajNBnmFtbYxN3E3/WjxmdbOOe+OXpnGJPcGsftc7cB2shRfA4lICPnE26+oVNXT6p0Lo20nY5XC7jyCO', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1552949630483'}}, 'keyAltNames': ['altname', 'another_altname']}]
|
|
9
|
+
|
|
10
|
+
tests:
|
|
11
|
+
- description: "timeoutMS applied to listCollections to get collection schema"
|
|
12
|
+
failPoint:
|
|
13
|
+
configureFailPoint: failCommand
|
|
14
|
+
mode: { times: 1 }
|
|
15
|
+
data:
|
|
16
|
+
failCommands: ["listCollections"]
|
|
17
|
+
blockConnection: true
|
|
18
|
+
blockTimeMS: 60
|
|
19
|
+
clientOptions:
|
|
20
|
+
autoEncryptOpts:
|
|
21
|
+
kmsProviders:
|
|
22
|
+
aws: {} # Credentials filled in from environment.
|
|
23
|
+
timeoutMS: 50
|
|
24
|
+
operations:
|
|
25
|
+
- name: insertOne
|
|
26
|
+
arguments:
|
|
27
|
+
document: &doc0 { _id: 1, encrypted_string: "string0", random: "abc" }
|
|
28
|
+
result:
|
|
29
|
+
isTimeoutError: true
|
|
30
|
+
expectations:
|
|
31
|
+
# Auto encryption will request the collection info.
|
|
32
|
+
- command_started_event:
|
|
33
|
+
command:
|
|
34
|
+
listCollections: 1
|
|
35
|
+
filter:
|
|
36
|
+
name: *collection_name
|
|
37
|
+
maxTimeMS: { $$type: ["int", "long"] }
|
|
38
|
+
command_name: listCollections
|
|
39
|
+
|
|
40
|
+
# Test that timeoutMS applies to the sum of all operations done for client-side encryption. This is done by blocking
|
|
41
|
+
# listCollections and find for 30ms each and running an insertOne with timeoutMS=50. There should be one
|
|
42
|
+
# listCollections command and one "find" command, so the sum should take more than timeoutMS. A second listCollections
|
|
43
|
+
# event doesn't occur due to the internal MongoClient lacking configured auto encryption, plus libmongocrypt holds the
|
|
44
|
+
# collection schema in cache for a minute.
|
|
45
|
+
#
|
|
46
|
+
# This test does not include command monitoring expectations because the exact command sequence is dependent on the
|
|
47
|
+
# amount of time taken by mongocryptd communication. In slow runs, mongocryptd communication can breach the timeout
|
|
48
|
+
# and result in the final "find" not being sent.
|
|
49
|
+
- description: "remaining timeoutMS applied to find to get keyvault data"
|
|
50
|
+
failPoint:
|
|
51
|
+
configureFailPoint: failCommand
|
|
52
|
+
mode: { times: 2 }
|
|
53
|
+
data:
|
|
54
|
+
failCommands: ["listCollections", "find"]
|
|
55
|
+
blockConnection: true
|
|
56
|
+
blockTimeMS: 30
|
|
57
|
+
clientOptions:
|
|
58
|
+
autoEncryptOpts:
|
|
59
|
+
kmsProviders:
|
|
60
|
+
aws: {} # Credentials filled in from environment.
|
|
61
|
+
timeoutMS: 50
|
|
62
|
+
operations:
|
|
63
|
+
- name: insertOne
|
|
64
|
+
arguments:
|
|
65
|
+
document: *doc0
|
|
66
|
+
result:
|
|
67
|
+
isTimeoutError: true
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
description: "timeoutMS behaves correctly for bulkWrite operations"
|
|
2
|
+
|
|
3
|
+
schemaVersion: "1.9"
|
|
4
|
+
|
|
5
|
+
runOnRequirements:
|
|
6
|
+
- minServerVersion: "4.4"
|
|
7
|
+
|
|
8
|
+
createEntities:
|
|
9
|
+
- client:
|
|
10
|
+
id: &failPointClient failPointClient
|
|
11
|
+
useMultipleMongoses: false
|
|
12
|
+
- client:
|
|
13
|
+
id: &client client
|
|
14
|
+
useMultipleMongoses: false
|
|
15
|
+
observeEvents:
|
|
16
|
+
- commandStartedEvent
|
|
17
|
+
uriOptions:
|
|
18
|
+
# Used to speed up the test
|
|
19
|
+
w: 1
|
|
20
|
+
- database:
|
|
21
|
+
id: &database database
|
|
22
|
+
client: *client
|
|
23
|
+
databaseName: &databaseName test
|
|
24
|
+
- collection:
|
|
25
|
+
id: &collection collection
|
|
26
|
+
database: *database
|
|
27
|
+
collectionName: &collectionName coll
|
|
28
|
+
|
|
29
|
+
initialData:
|
|
30
|
+
- collectionName: *collectionName
|
|
31
|
+
databaseName: *databaseName
|
|
32
|
+
documents: []
|
|
33
|
+
|
|
34
|
+
tests:
|
|
35
|
+
# Test that drivers do not refresh timeoutMS between commands. This is done by running a bulkWrite that will require
|
|
36
|
+
# two commands with timeoutMS=200 and blocking each command for 120ms. The server should take over 200ms total, so the
|
|
37
|
+
# bulkWrite should fail with a timeout error.
|
|
38
|
+
- description: "timeoutMS applied to entire bulkWrite, not individual commands"
|
|
39
|
+
operations:
|
|
40
|
+
# Do an operation without a timeout to ensure the servers are discovered.
|
|
41
|
+
- name: insertOne
|
|
42
|
+
object: *collection
|
|
43
|
+
arguments:
|
|
44
|
+
document: {}
|
|
45
|
+
- name: failPoint
|
|
46
|
+
object: testRunner
|
|
47
|
+
arguments:
|
|
48
|
+
client: *failPointClient
|
|
49
|
+
failPoint:
|
|
50
|
+
configureFailPoint: failCommand
|
|
51
|
+
mode: { times: 2 }
|
|
52
|
+
data:
|
|
53
|
+
failCommands: ["insert", "update"]
|
|
54
|
+
blockConnection: true
|
|
55
|
+
blockTimeMS: 120
|
|
56
|
+
- name: bulkWrite
|
|
57
|
+
object: *collection
|
|
58
|
+
arguments:
|
|
59
|
+
requests:
|
|
60
|
+
- insertOne:
|
|
61
|
+
document: { _id: 1 }
|
|
62
|
+
- replaceOne:
|
|
63
|
+
filter: { _id: 1 }
|
|
64
|
+
replacement: { x: 1 }
|
|
65
|
+
timeoutMS: 200
|
|
66
|
+
expectError:
|
|
67
|
+
isTimeoutError: true
|
|
68
|
+
expectEvents:
|
|
69
|
+
- client: *client
|
|
70
|
+
events:
|
|
71
|
+
- commandStartedEvent:
|
|
72
|
+
commandName: insert
|
|
73
|
+
databaseName: *databaseName
|
|
74
|
+
command:
|
|
75
|
+
insert: *collectionName
|
|
76
|
+
- commandStartedEvent:
|
|
77
|
+
commandName: insert
|
|
78
|
+
databaseName: *databaseName
|
|
79
|
+
command:
|
|
80
|
+
insert: *collectionName
|
|
81
|
+
maxTimeMS: { $$type: ["int", "long"] }
|
|
82
|
+
- commandStartedEvent:
|
|
83
|
+
commandName: update
|
|
84
|
+
databaseName: *databaseName
|
|
85
|
+
command:
|
|
86
|
+
update: *collectionName
|
|
87
|
+
maxTimeMS: { $$type: ["int", "long"] }
|